//===----------------------------------------------------------------------===//
//
// This source file is part of the Soto for AWS open source project
//
// Copyright (c) 2017-2024 the Soto project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of Soto project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//===----------------------------------------------------------------------===//

// THIS FILE IS AUTOMATICALLY GENERATED by https://github.com/soto-project/soto-codegenerator.
// DO NOT EDIT.

#if canImport(FoundationEssentials)
import FoundationEssentials
#else
import Foundation
#endif
@_exported import SotoCore

/// Service object for interacting with AWS Personalize service.
///
/// Amazon Personalize is a machine learning service that makes it easy to add individualized recommendations to customers.
public struct Personalize: AWSService {
    // MARK: Member variables

    /// Client used for communication with AWS
    public let client: AWSClient
    /// Service configuration
    public let config: AWSServiceConfig

    // MARK: Initialization

    /// Initialize the Personalize client
    /// - parameters:
    ///     - client: AWSClient used to process requests
    ///     - region: Region of server you want to communicate with. This will override the partition parameter.
    ///     - partition: AWS partition where service resides, standard (.aws), china (.awscn), government (.awsusgov).
    ///     - endpoint: Custom endpoint URL to use instead of standard AWS servers
    ///     - middleware: Middleware chain used to edit requests before they are sent and responses before they are decoded 
    ///     - timeout: Timeout value for HTTP requests
    ///     - byteBufferAllocator: Allocator for ByteBuffers
    ///     - options: Service options
    public init(
        client: AWSClient,
        region: SotoCore.Region? = nil,
        partition: AWSPartition = .aws,
        endpoint: String? = nil,
        middleware: AWSMiddlewareProtocol? = nil,
        timeout: TimeAmount? = nil,
        byteBufferAllocator: ByteBufferAllocator = ByteBufferAllocator(),
        options: AWSServiceConfig.Options = []
    ) {
        self.client = client
        self.config = AWSServiceConfig(
            region: region,
            partition: region?.partition ?? partition,
            amzTarget: "AmazonPersonalize",
            serviceName: "Personalize",
            serviceIdentifier: "personalize",
            serviceProtocol: .json(version: "1.1"),
            apiVersion: "2018-05-22",
            endpoint: endpoint,
            errorType: PersonalizeErrorType.self,
            middleware: middleware,
            timeout: timeout,
            byteBufferAllocator: byteBufferAllocator,
            options: options
        )
    }





    // MARK: API Calls

    /// Generates batch recommendations based on a list of items or users stored in Amazon S3 and exports the recommendations to an Amazon S3 bucket. To generate batch recommendations, specify the ARN of a solution version and an Amazon S3 URI for the input and output data. For user personalization, popular items, and personalized ranking solutions, the batch inference job generates a list of recommended items for each user ID in the input file. For related items solutions, the job generates a list of recommended items for each item ID in the input file. For more information, see Creating a batch inference job .  If you use the Similar-Items recipe, Amazon Personalize can add descriptive themes to batch recommendations.  To generate themes, set the job's mode to THEME_GENERATION and specify the name of the field that contains item names in the input data.  For more information about generating themes, see Batch recommendations with themes from Content Generator .  You can't get batch recommendations with the Trending-Now or Next-Best-Action recipes.
    @Sendable
    @inlinable
    public func createBatchInferenceJob(_ input: CreateBatchInferenceJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateBatchInferenceJobResponse {
        try await self.client.execute(
            operation: "CreateBatchInferenceJob", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Generates batch recommendations based on a list of items or users stored in Amazon S3 and exports the recommendations to an Amazon S3 bucket. To generate batch recommendations, specify the ARN of a solution version and an Amazon S3 URI for the input and output data. For user personalization, popular items, and personalized ranking solutions, the batch inference job generates a list of recommended items for each user ID in the input file. For related items solutions, the job generates a list of recommended items for each item ID in the input file. For more information, see Creating a batch inference job .  If you use the Similar-Items recipe, Amazon Personalize can add descriptive themes to batch recommendations.  To generate themes, set the job's mode to THEME_GENERATION and specify the name of the field that contains item names in the input data.  For more information about generating themes, see Batch recommendations with themes from Content Generator .  You can't get batch recommendations with the Trending-Now or Next-Best-Action recipes.
    ///
    /// Parameters:
    ///   - batchInferenceJobConfig: The configuration details of a batch inference job.
    ///   - batchInferenceJobMode: The mode of the batch inference job. To generate descriptive themes for groups of similar items, set the job mode to THEME_GENERATION. If you don't want to generate themes, use the default BATCH_INFERENCE.  When you get batch recommendations with themes, you will incur additional costs. For more information, see Amazon Personalize pricing.
    ///   - filterArn: The ARN of the filter to apply to the batch inference job. For more information on using filters, see Filtering batch recommendations.
    ///   - jobInput: The Amazon S3 path that leads to the input file to base your recommendations on. The input material must be in JSON format.
    ///   - jobName: The name of the batch inference job to create.
    ///   - jobOutput: The path to the Amazon S3 bucket where the job's output will be stored.
    ///   - numResults: The number of recommendations to retrieve.
    ///   - roleArn: The ARN of the Amazon Identity and Access Management role that has permissions to read and write to your input and output Amazon S3 buckets respectively.
    ///   - solutionVersionArn: The Amazon Resource Name (ARN) of the solution version that will be used to generate the batch inference recommendations.
    ///   - tags: A list of tags to apply to the batch inference job.
    ///   - themeGenerationConfig: For theme generation jobs, specify the name of the column in your Items dataset that contains each item's name.
    ///   - logger: Logger use during operation
    @inlinable
    public func createBatchInferenceJob(
        batchInferenceJobConfig: BatchInferenceJobConfig? = nil,
        batchInferenceJobMode: BatchInferenceJobMode? = nil,
        filterArn: String? = nil,
        jobInput: BatchInferenceJobInput,
        jobName: String,
        jobOutput: BatchInferenceJobOutput,
        numResults: Int? = nil,
        roleArn: String,
        solutionVersionArn: String,
        tags: [Tag]? = nil,
        themeGenerationConfig: ThemeGenerationConfig? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateBatchInferenceJobResponse {
        let input = CreateBatchInferenceJobRequest(
            batchInferenceJobConfig: batchInferenceJobConfig, 
            batchInferenceJobMode: batchInferenceJobMode, 
            filterArn: filterArn, 
            jobInput: jobInput, 
            jobName: jobName, 
            jobOutput: jobOutput, 
            numResults: numResults, 
            roleArn: roleArn, 
            solutionVersionArn: solutionVersionArn, 
            tags: tags, 
            themeGenerationConfig: themeGenerationConfig
        )
        return try await self.createBatchInferenceJob(input, logger: logger)
    }

    /// Creates a batch segment job. The operation can handle up to 50 million records and the input file must be in JSON format. For more information, see  Getting batch recommendations and user segments.
    @Sendable
    @inlinable
    public func createBatchSegmentJob(_ input: CreateBatchSegmentJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateBatchSegmentJobResponse {
        try await self.client.execute(
            operation: "CreateBatchSegmentJob", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a batch segment job. The operation can handle up to 50 million records and the input file must be in JSON format. For more information, see  Getting batch recommendations and user segments.
    ///
    /// Parameters:
    ///   - filterArn: The ARN of the filter to apply to the batch segment job. For more information on using filters, see Filtering batch recommendations.
    ///   - jobInput: The Amazon S3 path for the input data used to generate the batch segment job.
    ///   - jobName: The name of the batch segment job to create.
    ///   - jobOutput: The Amazon S3 path for the bucket where the job's output will be stored.
    ///   - numResults: The number of predicted users generated by the batch segment job for each line of input data. The maximum number of users per segment is 5 million.
    ///   - roleArn: The ARN of the Amazon Identity and Access Management role that has permissions to read and write to your input and output Amazon S3 buckets respectively.
    ///   - solutionVersionArn: The Amazon Resource Name (ARN) of the solution version you want the batch segment job to use to generate batch segments.
    ///   - tags: A list of tags to apply to the batch segment job.
    ///   - logger: Logger use during operation
    @inlinable
    public func createBatchSegmentJob(
        filterArn: String? = nil,
        jobInput: BatchSegmentJobInput,
        jobName: String,
        jobOutput: BatchSegmentJobOutput,
        numResults: Int? = nil,
        roleArn: String,
        solutionVersionArn: String,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateBatchSegmentJobResponse {
        let input = CreateBatchSegmentJobRequest(
            filterArn: filterArn, 
            jobInput: jobInput, 
            jobName: jobName, 
            jobOutput: jobOutput, 
            numResults: numResults, 
            roleArn: roleArn, 
            solutionVersionArn: solutionVersionArn, 
            tags: tags
        )
        return try await self.createBatchSegmentJob(input, logger: logger)
    }

    ///  You incur campaign costs while it is active. To avoid unnecessary costs, make sure to delete the campaign when you are finished. For information about campaign costs, see Amazon Personalize pricing.  Creates a campaign that deploys a solution version. When a client calls the GetRecommendations and GetPersonalizedRanking APIs, a campaign is specified in the request.  Minimum Provisioned TPS and Auto-Scaling   A high minProvisionedTPS will increase your cost. We recommend starting with 1 for minProvisionedTPS (the default). Track your usage using Amazon CloudWatch metrics, and increase the minProvisionedTPS as necessary.   When you create an Amazon Personalize campaign, you can specify the minimum provisioned transactions per second (minProvisionedTPS) for the campaign. This is the baseline transaction throughput for the campaign provisioned by Amazon Personalize. It sets the minimum billing charge for the campaign while it is active. A transaction is a single GetRecommendations or GetPersonalizedRanking request. The default minProvisionedTPS is 1. If your TPS increases beyond the minProvisionedTPS, Amazon Personalize auto-scales the provisioned capacity up and down, but never below minProvisionedTPS.  There's a short time delay while the capacity is increased that might cause loss of transactions. When your traffic reduces, capacity returns to the minProvisionedTPS.  You are charged for the the minimum provisioned TPS or, if your requests exceed the minProvisionedTPS, the actual TPS.  The actual TPS is the total number of recommendation requests you make. We recommend starting with a low minProvisionedTPS, track your usage using Amazon CloudWatch metrics, and then increase the minProvisionedTPS as necessary. For more information about campaign costs, see Amazon Personalize pricing.  Status  A campaign can be in one of the following states:   CREATE PENDING > CREATE IN_PROGRESS > ACTIVE -or- CREATE FAILED   DELETE PENDING > DELETE IN_PROGRESS   To get the campaign status, call DescribeCampaign.  Wait until the status of the campaign is ACTIVE before asking the campaign for recommendations.   Related APIs     ListCampaigns     DescribeCampaign     UpdateCampaign     DeleteCampaign
    @Sendable
    @inlinable
    public func createCampaign(_ input: CreateCampaignRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateCampaignResponse {
        try await self.client.execute(
            operation: "CreateCampaign", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  You incur campaign costs while it is active. To avoid unnecessary costs, make sure to delete the campaign when you are finished. For information about campaign costs, see Amazon Personalize pricing.  Creates a campaign that deploys a solution version. When a client calls the GetRecommendations and GetPersonalizedRanking APIs, a campaign is specified in the request.  Minimum Provisioned TPS and Auto-Scaling   A high minProvisionedTPS will increase your cost. We recommend starting with 1 for minProvisionedTPS (the default). Track your usage using Amazon CloudWatch metrics, and increase the minProvisionedTPS as necessary.   When you create an Amazon Personalize campaign, you can specify the minimum provisioned transactions per second (minProvisionedTPS) for the campaign. This is the baseline transaction throughput for the campaign provisioned by Amazon Personalize. It sets the minimum billing charge for the campaign while it is active. A transaction is a single GetRecommendations or GetPersonalizedRanking request. The default minProvisionedTPS is 1. If your TPS increases beyond the minProvisionedTPS, Amazon Personalize auto-scales the provisioned capacity up and down, but never below minProvisionedTPS.  There's a short time delay while the capacity is increased that might cause loss of transactions. When your traffic reduces, capacity returns to the minProvisionedTPS.  You are charged for the the minimum provisioned TPS or, if your requests exceed the minProvisionedTPS, the actual TPS.  The actual TPS is the total number of recommendation requests you make. We recommend starting with a low minProvisionedTPS, track your usage using Amazon CloudWatch metrics, and then increase the minProvisionedTPS as necessary. For more information about campaign costs, see Amazon Personalize pricing.  Status  A campaign can be in one of the following states:   CREATE PENDING > CREATE IN_PROGRESS > ACTIVE -or- CREATE FAILED   DELETE PENDING > DELETE IN_PROGRESS   To get the campaign status, call DescribeCampaign.  Wait until the status of the campaign is ACTIVE before asking the campaign for recommendations.   Related APIs     ListCampaigns     DescribeCampaign     UpdateCampaign     DeleteCampaign
    ///
    /// Parameters:
    ///   - campaignConfig: The configuration details of a campaign.
    ///   - minProvisionedTPS: Specifies the requested minimum provisioned transactions (recommendations) per second that Amazon Personalize will support.  A high minProvisionedTPS will increase your bill. We recommend starting with 1 for minProvisionedTPS (the default). Track your usage using Amazon CloudWatch metrics, and increase the minProvisionedTPS as necessary.
    ///   - name: A name for the new campaign. The campaign name must be unique within your account.
    ///   - solutionVersionArn: The Amazon Resource Name (ARN) of the trained model to deploy with the campaign. To specify the latest solution version of your solution,  specify the ARN of your solution in SolutionArn/$LATEST format. You must use this format if you set syncWithLatestSolutionVersion to True in the  CampaignConfig.   To deploy a model that isn't the latest solution version of your solution, specify the ARN of the solution version.   For more information about automatic campaign updates, see  Enabling automatic campaign updates.
    ///   - tags: A list of tags to apply to the campaign.
    ///   - logger: Logger use during operation
    @inlinable
    public func createCampaign(
        campaignConfig: CampaignConfig? = nil,
        minProvisionedTPS: Int? = nil,
        name: String,
        solutionVersionArn: String,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateCampaignResponse {
        let input = CreateCampaignRequest(
            campaignConfig: campaignConfig, 
            minProvisionedTPS: minProvisionedTPS, 
            name: name, 
            solutionVersionArn: solutionVersionArn, 
            tags: tags
        )
        return try await self.createCampaign(input, logger: logger)
    }

    /// Creates a batch job that deletes all references to specific users from an Amazon Personalize dataset group in batches. You specify the users to delete in a CSV file of userIds in  an Amazon S3 bucket. After a job completes, Amazon Personalize no longer trains on the users’ data and no longer considers the users when generating user segments.  For more information about creating a data deletion job, see Deleting users.   Your input file must be a CSV file with a single USER_ID column that lists the users IDs. For more information about preparing the CSV file, see Preparing your data deletion file and uploading it to Amazon S3.   To give Amazon Personalize permission to access your input CSV file of userIds, you must specify an IAM service role that has permission to read from the data source. This role  needs GetObject and ListBucket permissions for the bucket and its content. These permissions are the same as importing data. For information on granting access to your Amazon S3 bucket, see Giving Amazon Personalize Access to Amazon S3 Resources.     After you create a job, it can take up to a day to delete all references to the users from datasets and models. Until the job completes,  Amazon Personalize continues to use the data when training. And if you use a User Segmentation recipe, the users might appear in user segments.    Status  A data deletion job can have one of the following statuses:   PENDING > IN_PROGRESS > COMPLETED -or- FAILED   To get the status of the data deletion job, call DescribeDataDeletionJob API operation and specify the Amazon Resource Name (ARN) of the job. If the status is FAILED, the response includes a failureReason key, which describes why the job failed.  Related APIs     ListDataDeletionJobs     DescribeDataDeletionJob
    @Sendable
    @inlinable
    public func createDataDeletionJob(_ input: CreateDataDeletionJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateDataDeletionJobResponse {
        try await self.client.execute(
            operation: "CreateDataDeletionJob", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a batch job that deletes all references to specific users from an Amazon Personalize dataset group in batches. You specify the users to delete in a CSV file of userIds in  an Amazon S3 bucket. After a job completes, Amazon Personalize no longer trains on the users’ data and no longer considers the users when generating user segments.  For more information about creating a data deletion job, see Deleting users.   Your input file must be a CSV file with a single USER_ID column that lists the users IDs. For more information about preparing the CSV file, see Preparing your data deletion file and uploading it to Amazon S3.   To give Amazon Personalize permission to access your input CSV file of userIds, you must specify an IAM service role that has permission to read from the data source. This role  needs GetObject and ListBucket permissions for the bucket and its content. These permissions are the same as importing data. For information on granting access to your Amazon S3 bucket, see Giving Amazon Personalize Access to Amazon S3 Resources.     After you create a job, it can take up to a day to delete all references to the users from datasets and models. Until the job completes,  Amazon Personalize continues to use the data when training. And if you use a User Segmentation recipe, the users might appear in user segments.    Status  A data deletion job can have one of the following statuses:   PENDING > IN_PROGRESS > COMPLETED -or- FAILED   To get the status of the data deletion job, call DescribeDataDeletionJob API operation and specify the Amazon Resource Name (ARN) of the job. If the status is FAILED, the response includes a failureReason key, which describes why the job failed.  Related APIs     ListDataDeletionJobs     DescribeDataDeletionJob
    ///
    /// Parameters:
    ///   - datasetGroupArn: The Amazon Resource Name (ARN) of the dataset group that has the datasets you want to delete records from.
    ///   - dataSource: The Amazon S3 bucket that contains the list of userIds of the users to delete.
    ///   - jobName: The name for the data deletion job.
    ///   - roleArn: The Amazon Resource Name (ARN) of the IAM role that has permissions to read from the Amazon S3 data source.
    ///   - tags: A list of tags to apply to the data deletion job.
    ///   - logger: Logger use during operation
    @inlinable
    public func createDataDeletionJob(
        datasetGroupArn: String,
        dataSource: DataSource,
        jobName: String,
        roleArn: String,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateDataDeletionJobResponse {
        let input = CreateDataDeletionJobRequest(
            datasetGroupArn: datasetGroupArn, 
            dataSource: dataSource, 
            jobName: jobName, 
            roleArn: roleArn, 
            tags: tags
        )
        return try await self.createDataDeletionJob(input, logger: logger)
    }

    /// Creates an empty dataset and adds it to the specified dataset group. Use CreateDatasetImportJob to import your training data to a dataset. There are 5 types of datasets:   Item interactions   Items   Users   Action interactions   Actions   Each dataset type has an associated schema with required field types. Only the Item interactions dataset is required in order to train a model (also referred to as creating a solution). A dataset can be in one of the following states:   CREATE PENDING > CREATE IN_PROGRESS > ACTIVE -or- CREATE FAILED   DELETE PENDING > DELETE IN_PROGRESS   To get the status of the dataset, call DescribeDataset.  Related APIs     CreateDatasetGroup     ListDatasets     DescribeDataset     DeleteDataset
    @Sendable
    @inlinable
    public func createDataset(_ input: CreateDatasetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateDatasetResponse {
        try await self.client.execute(
            operation: "CreateDataset", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates an empty dataset and adds it to the specified dataset group. Use CreateDatasetImportJob to import your training data to a dataset. There are 5 types of datasets:   Item interactions   Items   Users   Action interactions   Actions   Each dataset type has an associated schema with required field types. Only the Item interactions dataset is required in order to train a model (also referred to as creating a solution). A dataset can be in one of the following states:   CREATE PENDING > CREATE IN_PROGRESS > ACTIVE -or- CREATE FAILED   DELETE PENDING > DELETE IN_PROGRESS   To get the status of the dataset, call DescribeDataset.  Related APIs     CreateDatasetGroup     ListDatasets     DescribeDataset     DeleteDataset
    ///
    /// Parameters:
    ///   - datasetGroupArn: The Amazon Resource Name (ARN) of the dataset group to add the dataset to.
    ///   - datasetType: The type of dataset. One of the following (case insensitive) values:   Interactions   Items   Users   Actions   Action_Interactions
    ///   - name: The name for the dataset.
    ///   - schemaArn: The ARN of the schema to associate with the dataset. The schema defines the dataset fields.
    ///   - tags: A list of tags to apply to the dataset.
    ///   - logger: Logger use during operation
    @inlinable
    public func createDataset(
        datasetGroupArn: String,
        datasetType: String,
        name: String,
        schemaArn: String,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateDatasetResponse {
        let input = CreateDatasetRequest(
            datasetGroupArn: datasetGroupArn, 
            datasetType: datasetType, 
            name: name, 
            schemaArn: schemaArn, 
            tags: tags
        )
        return try await self.createDataset(input, logger: logger)
    }

    ///  Creates a job that exports data from your dataset to an Amazon S3 bucket. To allow Amazon Personalize to export the training data, you must specify an service-linked IAM role that gives Amazon Personalize PutObject permissions for your Amazon S3 bucket. For information, see Exporting a dataset in the Amazon Personalize developer guide.   Status  A dataset export job can be in one of the following states:   CREATE PENDING > CREATE IN_PROGRESS > ACTIVE -or- CREATE FAILED   To get the status of the export job, call DescribeDatasetExportJob, and specify the Amazon Resource Name (ARN) of the dataset export job. The dataset export is complete when the status shows as ACTIVE. If the status shows as CREATE FAILED, the response includes a failureReason key, which describes why the job failed.
    @Sendable
    @inlinable
    public func createDatasetExportJob(_ input: CreateDatasetExportJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateDatasetExportJobResponse {
        try await self.client.execute(
            operation: "CreateDatasetExportJob", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Creates a job that exports data from your dataset to an Amazon S3 bucket. To allow Amazon Personalize to export the training data, you must specify an service-linked IAM role that gives Amazon Personalize PutObject permissions for your Amazon S3 bucket. For information, see Exporting a dataset in the Amazon Personalize developer guide.   Status  A dataset export job can be in one of the following states:   CREATE PENDING > CREATE IN_PROGRESS > ACTIVE -or- CREATE FAILED   To get the status of the export job, call DescribeDatasetExportJob, and specify the Amazon Resource Name (ARN) of the dataset export job. The dataset export is complete when the status shows as ACTIVE. If the status shows as CREATE FAILED, the response includes a failureReason key, which describes why the job failed.
    ///
    /// Parameters:
    ///   - datasetArn: The Amazon Resource Name (ARN) of the dataset that contains the data to export.
    ///   - ingestionMode: The data to export, based on how you imported the data. You can choose to export only BULK data that you imported using a dataset import job, only PUT data that you imported incrementally (using the console, PutEvents, PutUsers and PutItems operations), or ALL for both types. The default value is PUT.
    ///   - jobName: The name for the dataset export job.
    ///   - jobOutput: The path to the Amazon S3 bucket where the job's output is stored.
    ///   - roleArn: The Amazon Resource Name (ARN) of the IAM service role that has permissions to add data to your output Amazon S3 bucket.
    ///   - tags: A list of tags to apply to the dataset export job.
    ///   - logger: Logger use during operation
    @inlinable
    public func createDatasetExportJob(
        datasetArn: String,
        ingestionMode: IngestionMode? = nil,
        jobName: String,
        jobOutput: DatasetExportJobOutput,
        roleArn: String,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateDatasetExportJobResponse {
        let input = CreateDatasetExportJobRequest(
            datasetArn: datasetArn, 
            ingestionMode: ingestionMode, 
            jobName: jobName, 
            jobOutput: jobOutput, 
            roleArn: roleArn, 
            tags: tags
        )
        return try await self.createDatasetExportJob(input, logger: logger)
    }

    /// Creates an empty dataset group. A dataset group is a container for Amazon Personalize resources. A dataset group can contain at most three datasets, one for each type of dataset:   Item interactions   Items   Users   Actions   Action interactions   A dataset group can be a Domain dataset group, where you specify a domain and use pre-configured resources like recommenders, or a Custom dataset group, where you use custom resources, such as a solution with a solution version, that you deploy with a campaign. If you start with a Domain dataset group, you can still add custom resources such as solutions and solution versions trained with recipes for custom use cases and deployed with campaigns.  A dataset group can be in one of the following states:   CREATE PENDING > CREATE IN_PROGRESS > ACTIVE -or- CREATE FAILED   DELETE PENDING   To get the status of the dataset group, call DescribeDatasetGroup. If the status shows as CREATE FAILED, the response includes a failureReason key, which describes why the creation failed.  You must wait until the status of the dataset group is ACTIVE before adding a dataset to the group.  You can specify an Key Management Service (KMS) key to encrypt the datasets in the group. If you specify a KMS key, you must also include an Identity and Access Management (IAM) role that has permission to access the key.  APIs that require a dataset group ARN in the request     CreateDataset     CreateEventTracker     CreateSolution     Related APIs     ListDatasetGroups     DescribeDatasetGroup     DeleteDatasetGroup
    @Sendable
    @inlinable
    public func createDatasetGroup(_ input: CreateDatasetGroupRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateDatasetGroupResponse {
        try await self.client.execute(
            operation: "CreateDatasetGroup", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates an empty dataset group. A dataset group is a container for Amazon Personalize resources. A dataset group can contain at most three datasets, one for each type of dataset:   Item interactions   Items   Users   Actions   Action interactions   A dataset group can be a Domain dataset group, where you specify a domain and use pre-configured resources like recommenders, or a Custom dataset group, where you use custom resources, such as a solution with a solution version, that you deploy with a campaign. If you start with a Domain dataset group, you can still add custom resources such as solutions and solution versions trained with recipes for custom use cases and deployed with campaigns.  A dataset group can be in one of the following states:   CREATE PENDING > CREATE IN_PROGRESS > ACTIVE -or- CREATE FAILED   DELETE PENDING   To get the status of the dataset group, call DescribeDatasetGroup. If the status shows as CREATE FAILED, the response includes a failureReason key, which describes why the creation failed.  You must wait until the status of the dataset group is ACTIVE before adding a dataset to the group.  You can specify an Key Management Service (KMS) key to encrypt the datasets in the group. If you specify a KMS key, you must also include an Identity and Access Management (IAM) role that has permission to access the key.  APIs that require a dataset group ARN in the request     CreateDataset     CreateEventTracker     CreateSolution     Related APIs     ListDatasetGroups     DescribeDatasetGroup     DeleteDatasetGroup
    ///
    /// Parameters:
    ///   - domain: The domain of the dataset group. Specify a domain to create a Domain dataset group. The domain you specify determines the default schemas for datasets and the use cases available for recommenders. If you don't specify a domain, you create a Custom dataset group with solution versions that you deploy with a campaign.
    ///   - kmsKeyArn: The Amazon Resource Name (ARN) of a Key Management Service (KMS) key used to encrypt the datasets.
    ///   - name: The name for the new dataset group.
    ///   - roleArn: The ARN of the Identity and Access Management (IAM) role that has permissions to access the Key Management Service (KMS) key. Supplying an IAM role is only valid when also specifying a KMS key.
    ///   - tags: A list of tags to apply to the dataset group.
    ///   - logger: Logger use during operation
    @inlinable
    public func createDatasetGroup(
        domain: Domain? = nil,
        kmsKeyArn: String? = nil,
        name: String,
        roleArn: String? = nil,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateDatasetGroupResponse {
        let input = CreateDatasetGroupRequest(
            domain: domain, 
            kmsKeyArn: kmsKeyArn, 
            name: name, 
            roleArn: roleArn, 
            tags: tags
        )
        return try await self.createDatasetGroup(input, logger: logger)
    }

    /// Creates a job that imports training data from your data source (an Amazon S3 bucket) to an Amazon Personalize dataset. To allow Amazon Personalize to import the training data, you must specify an IAM service role that has permission to read from the data source, as Amazon Personalize makes a copy of your data and processes it internally. For information on granting access to your Amazon S3 bucket, see Giving Amazon Personalize Access to Amazon S3 Resources.  If you already created a recommender or deployed a custom solution version with a campaign, how new bulk records influence recommendations depends on the domain use case or recipe that you use. For more information, see How new data influences real-time recommendations.  By default, a dataset import job replaces any existing data in the dataset that you imported in bulk. To add new records without replacing existing data, specify INCREMENTAL for the import mode in the CreateDatasetImportJob operation.   Status  A dataset import job can be in one of the following states:   CREATE PENDING > CREATE IN_PROGRESS > ACTIVE -or- CREATE FAILED   To get the status of the import job, call DescribeDatasetImportJob, providing the Amazon Resource Name (ARN) of the dataset import job. The dataset import is complete when the status shows as ACTIVE. If the status shows as CREATE FAILED, the response includes a failureReason key, which describes why the job failed.  Importing takes time. You must wait until the status shows as ACTIVE before training a model using the dataset.   Related APIs     ListDatasetImportJobs     DescribeDatasetImportJob
    @Sendable
    @inlinable
    public func createDatasetImportJob(_ input: CreateDatasetImportJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateDatasetImportJobResponse {
        try await self.client.execute(
            operation: "CreateDatasetImportJob", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a job that imports training data from your data source (an Amazon S3 bucket) to an Amazon Personalize dataset. To allow Amazon Personalize to import the training data, you must specify an IAM service role that has permission to read from the data source, as Amazon Personalize makes a copy of your data and processes it internally. For information on granting access to your Amazon S3 bucket, see Giving Amazon Personalize Access to Amazon S3 Resources.  If you already created a recommender or deployed a custom solution version with a campaign, how new bulk records influence recommendations depends on the domain use case or recipe that you use. For more information, see How new data influences real-time recommendations.  By default, a dataset import job replaces any existing data in the dataset that you imported in bulk. To add new records without replacing existing data, specify INCREMENTAL for the import mode in the CreateDatasetImportJob operation.   Status  A dataset import job can be in one of the following states:   CREATE PENDING > CREATE IN_PROGRESS > ACTIVE -or- CREATE FAILED   To get the status of the import job, call DescribeDatasetImportJob, providing the Amazon Resource Name (ARN) of the dataset import job. The dataset import is complete when the status shows as ACTIVE. If the status shows as CREATE FAILED, the response includes a failureReason key, which describes why the job failed.  Importing takes time. You must wait until the status shows as ACTIVE before training a model using the dataset.   Related APIs     ListDatasetImportJobs     DescribeDatasetImportJob
    ///
    /// Parameters:
    ///   - datasetArn: The ARN of the dataset that receives the imported data.
    ///   - dataSource: The Amazon S3 bucket that contains the training data to import.
    ///   - importMode: Specify how to add the new records to an existing dataset. The default import mode is FULL. If you haven't imported bulk records into the dataset previously, you can only specify FULL.   Specify FULL to overwrite all existing bulk data in your dataset. Data you imported individually is not replaced.   Specify INCREMENTAL to append the new records to the existing data in your dataset. Amazon Personalize replaces any record with the same ID with the new one.
    ///   - jobName: The name for the dataset import job.
    ///   - publishAttributionMetricsToS3: If you created a metric attribution, specify whether to publish metrics for this import job to Amazon S3
    ///   - roleArn: The ARN of the IAM role that has permissions to read from the Amazon S3 data source.
    ///   - tags: A list of tags to apply to the dataset import job.
    ///   - logger: Logger use during operation
    @inlinable
    public func createDatasetImportJob(
        datasetArn: String,
        dataSource: DataSource,
        importMode: ImportMode? = nil,
        jobName: String,
        publishAttributionMetricsToS3: Bool? = nil,
        roleArn: String,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateDatasetImportJobResponse {
        let input = CreateDatasetImportJobRequest(
            datasetArn: datasetArn, 
            dataSource: dataSource, 
            importMode: importMode, 
            jobName: jobName, 
            publishAttributionMetricsToS3: publishAttributionMetricsToS3, 
            roleArn: roleArn, 
            tags: tags
        )
        return try await self.createDatasetImportJob(input, logger: logger)
    }

    /// Creates an event tracker that you use when adding event data to a specified dataset group using the PutEvents API.  Only one event tracker can be associated with a dataset group. You will get an error if you call CreateEventTracker using the same dataset group as an existing event tracker.  When you create an event tracker, the response includes a tracking ID, which you pass as a parameter when you use the PutEvents operation. Amazon Personalize then appends the event data to the Item interactions dataset of the dataset group you specify  in your event tracker.  The event tracker can be in one of the following states:   CREATE PENDING > CREATE IN_PROGRESS > ACTIVE -or- CREATE FAILED   DELETE PENDING > DELETE IN_PROGRESS   To get the status of the event tracker, call DescribeEventTracker.  The event tracker must be in the ACTIVE state before using the tracking ID.   Related APIs     ListEventTrackers     DescribeEventTracker     DeleteEventTracker
    @Sendable
    @inlinable
    public func createEventTracker(_ input: CreateEventTrackerRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateEventTrackerResponse {
        try await self.client.execute(
            operation: "CreateEventTracker", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates an event tracker that you use when adding event data to a specified dataset group using the PutEvents API.  Only one event tracker can be associated with a dataset group. You will get an error if you call CreateEventTracker using the same dataset group as an existing event tracker.  When you create an event tracker, the response includes a tracking ID, which you pass as a parameter when you use the PutEvents operation. Amazon Personalize then appends the event data to the Item interactions dataset of the dataset group you specify  in your event tracker.  The event tracker can be in one of the following states:   CREATE PENDING > CREATE IN_PROGRESS > ACTIVE -or- CREATE FAILED   DELETE PENDING > DELETE IN_PROGRESS   To get the status of the event tracker, call DescribeEventTracker.  The event tracker must be in the ACTIVE state before using the tracking ID.   Related APIs     ListEventTrackers     DescribeEventTracker     DeleteEventTracker
    ///
    /// Parameters:
    ///   - datasetGroupArn: The Amazon Resource Name (ARN) of the dataset group that receives the event data.
    ///   - name: The name for the event tracker.
    ///   - tags: A list of tags to apply to the event tracker.
    ///   - logger: Logger use during operation
    @inlinable
    public func createEventTracker(
        datasetGroupArn: String,
        name: String,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateEventTrackerResponse {
        let input = CreateEventTrackerRequest(
            datasetGroupArn: datasetGroupArn, 
            name: name, 
            tags: tags
        )
        return try await self.createEventTracker(input, logger: logger)
    }

    /// Creates a recommendation filter. For more information, see Filtering recommendations and user segments.
    @Sendable
    @inlinable
    public func createFilter(_ input: CreateFilterRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateFilterResponse {
        try await self.client.execute(
            operation: "CreateFilter", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a recommendation filter. For more information, see Filtering recommendations and user segments.
    ///
    /// Parameters:
    ///   - datasetGroupArn: The ARN of the dataset group that the filter will belong to.
    ///   - filterExpression: The filter expression defines which items are included or excluded from recommendations. Filter expression must follow specific format rules.  For information about filter expression structure and syntax, see Filter expressions.
    ///   - name: The name of the filter to create.
    ///   - tags: A list of tags to apply to the filter.
    ///   - logger: Logger use during operation
    @inlinable
    public func createFilter(
        datasetGroupArn: String,
        filterExpression: String,
        name: String,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateFilterResponse {
        let input = CreateFilterRequest(
            datasetGroupArn: datasetGroupArn, 
            filterExpression: filterExpression, 
            name: name, 
            tags: tags
        )
        return try await self.createFilter(input, logger: logger)
    }

    /// Creates a metric attribution.  A metric attribution creates reports on the data that you import into Amazon Personalize. Depending on how you imported the data, you can view reports in Amazon CloudWatch or Amazon S3. For more information, see Measuring impact of recommendations.
    @Sendable
    @inlinable
    public func createMetricAttribution(_ input: CreateMetricAttributionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateMetricAttributionResponse {
        try await self.client.execute(
            operation: "CreateMetricAttribution", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a metric attribution.  A metric attribution creates reports on the data that you import into Amazon Personalize. Depending on how you imported the data, you can view reports in Amazon CloudWatch or Amazon S3. For more information, see Measuring impact of recommendations.
    ///
    /// Parameters:
    ///   - datasetGroupArn: The Amazon Resource Name (ARN) of the destination dataset group for the metric attribution.
    ///   - metrics: A list of metric attributes for the metric attribution. Each metric attribute specifies an event type to track and a function. Available functions are SUM() or SAMPLECOUNT(). For SUM() functions, provide the  dataset type (either Interactions or Items) and column to sum as a parameter. For example SUM(Items.PRICE).
    ///   - metricsOutputConfig: The output configuration details for the metric attribution.
    ///   - name: A name for the metric attribution.
    ///   - logger: Logger use during operation
    @inlinable
    public func createMetricAttribution(
        datasetGroupArn: String,
        metrics: [MetricAttribute],
        metricsOutputConfig: MetricAttributionOutput,
        name: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateMetricAttributionResponse {
        let input = CreateMetricAttributionRequest(
            datasetGroupArn: datasetGroupArn, 
            metrics: metrics, 
            metricsOutputConfig: metricsOutputConfig, 
            name: name
        )
        return try await self.createMetricAttribution(input, logger: logger)
    }

    /// Creates a recommender with the recipe (a Domain dataset group use case) you specify.  You create recommenders for a Domain dataset group and specify the recommender's Amazon Resource Name (ARN) when you make a GetRecommendations request.   Minimum recommendation requests per second   A high minRecommendationRequestsPerSecond will increase your bill. We recommend starting with 1 for minRecommendationRequestsPerSecond (the default). Track your usage using Amazon CloudWatch metrics, and increase the minRecommendationRequestsPerSecond as necessary.  When you create a recommender, you can configure the recommender's minimum recommendation requests per second. The minimum recommendation requests per second (minRecommendationRequestsPerSecond) specifies the baseline recommendation request throughput provisioned by Amazon Personalize. The default minRecommendationRequestsPerSecond is 1. A recommendation request is a single GetRecommendations operation. Request throughput is measured in requests per second and Amazon Personalize uses your requests per second to derive your requests per hour and the price of your recommender usage.   If your requests per second increases beyond minRecommendationRequestsPerSecond, Amazon Personalize auto-scales the provisioned capacity up and down, but never below minRecommendationRequestsPerSecond. There's a short time delay while the capacity is increased that might cause loss of requests.  Your bill is the greater of either the minimum requests per hour (based on minRecommendationRequestsPerSecond) or the actual number of requests. The actual request throughput used is calculated as the average requests/second within a one-hour window.  We recommend starting with the default minRecommendationRequestsPerSecond, track your usage using Amazon CloudWatch metrics, and then increase the minRecommendationRequestsPerSecond as necessary.   Status  A recommender can be in one of the following states:   CREATE PENDING > CREATE IN_PROGRESS > ACTIVE -or- CREATE FAILED   STOP PENDING > STOP IN_PROGRESS > INACTIVE > START PENDING > START IN_PROGRESS > ACTIVE   DELETE PENDING > DELETE IN_PROGRESS   To get the recommender status, call DescribeRecommender.  Wait until the status of the recommender is ACTIVE before asking the recommender for recommendations.   Related APIs     ListRecommenders     DescribeRecommender     UpdateRecommender     DeleteRecommender
    @Sendable
    @inlinable
    public func createRecommender(_ input: CreateRecommenderRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateRecommenderResponse {
        try await self.client.execute(
            operation: "CreateRecommender", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a recommender with the recipe (a Domain dataset group use case) you specify.  You create recommenders for a Domain dataset group and specify the recommender's Amazon Resource Name (ARN) when you make a GetRecommendations request.   Minimum recommendation requests per second   A high minRecommendationRequestsPerSecond will increase your bill. We recommend starting with 1 for minRecommendationRequestsPerSecond (the default). Track your usage using Amazon CloudWatch metrics, and increase the minRecommendationRequestsPerSecond as necessary.  When you create a recommender, you can configure the recommender's minimum recommendation requests per second. The minimum recommendation requests per second (minRecommendationRequestsPerSecond) specifies the baseline recommendation request throughput provisioned by Amazon Personalize. The default minRecommendationRequestsPerSecond is 1. A recommendation request is a single GetRecommendations operation. Request throughput is measured in requests per second and Amazon Personalize uses your requests per second to derive your requests per hour and the price of your recommender usage.   If your requests per second increases beyond minRecommendationRequestsPerSecond, Amazon Personalize auto-scales the provisioned capacity up and down, but never below minRecommendationRequestsPerSecond. There's a short time delay while the capacity is increased that might cause loss of requests.  Your bill is the greater of either the minimum requests per hour (based on minRecommendationRequestsPerSecond) or the actual number of requests. The actual request throughput used is calculated as the average requests/second within a one-hour window.  We recommend starting with the default minRecommendationRequestsPerSecond, track your usage using Amazon CloudWatch metrics, and then increase the minRecommendationRequestsPerSecond as necessary.   Status  A recommender can be in one of the following states:   CREATE PENDING > CREATE IN_PROGRESS > ACTIVE -or- CREATE FAILED   STOP PENDING > STOP IN_PROGRESS > INACTIVE > START PENDING > START IN_PROGRESS > ACTIVE   DELETE PENDING > DELETE IN_PROGRESS   To get the recommender status, call DescribeRecommender.  Wait until the status of the recommender is ACTIVE before asking the recommender for recommendations.   Related APIs     ListRecommenders     DescribeRecommender     UpdateRecommender     DeleteRecommender
    ///
    /// Parameters:
    ///   - datasetGroupArn: The Amazon Resource Name (ARN) of the destination domain dataset group for the recommender.
    ///   - name: The name of the recommender.
    ///   - recipeArn: The Amazon Resource Name (ARN) of the recipe that the recommender will use. For a recommender, a recipe is a Domain dataset group use case. Only Domain dataset group use cases can be used to create a recommender. For information about use cases see Choosing recommender use cases.
    ///   - recommenderConfig: The configuration details of the recommender.
    ///   - tags: A list of tags to apply to the recommender.
    ///   - logger: Logger use during operation
    @inlinable
    public func createRecommender(
        datasetGroupArn: String,
        name: String,
        recipeArn: String,
        recommenderConfig: RecommenderConfig? = nil,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateRecommenderResponse {
        let input = CreateRecommenderRequest(
            datasetGroupArn: datasetGroupArn, 
            name: name, 
            recipeArn: recipeArn, 
            recommenderConfig: recommenderConfig, 
            tags: tags
        )
        return try await self.createRecommender(input, logger: logger)
    }

    /// Creates an Amazon Personalize schema from the specified schema string. The schema you create must be in Avro JSON format. Amazon Personalize recognizes three schema variants. Each schema is associated with a dataset type and has a set of required field and keywords. If you are creating a schema for a dataset in a Domain dataset group, you provide the domain of the Domain dataset group. You specify a schema when you call CreateDataset.  Related APIs     ListSchemas     DescribeSchema     DeleteSchema
    @Sendable
    @inlinable
    public func createSchema(_ input: CreateSchemaRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateSchemaResponse {
        try await self.client.execute(
            operation: "CreateSchema", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates an Amazon Personalize schema from the specified schema string. The schema you create must be in Avro JSON format. Amazon Personalize recognizes three schema variants. Each schema is associated with a dataset type and has a set of required field and keywords. If you are creating a schema for a dataset in a Domain dataset group, you provide the domain of the Domain dataset group. You specify a schema when you call CreateDataset.  Related APIs     ListSchemas     DescribeSchema     DeleteSchema
    ///
    /// Parameters:
    ///   - domain: The domain for the schema. If you are creating a schema for a dataset in a Domain dataset group, specify the domain you chose when you created the Domain dataset group.
    ///   - name: The name for the schema.
    ///   - schema: A schema in Avro JSON format.
    ///   - logger: Logger use during operation
    @inlinable
    public func createSchema(
        domain: Domain? = nil,
        name: String,
        schema: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateSchemaResponse {
        let input = CreateSchemaRequest(
            domain: domain, 
            name: name, 
            schema: schema
        )
        return try await self.createSchema(input, logger: logger)
    }

    ///  By default, all new solutions use automatic training. With automatic training, you incur training costs while your solution is active. To avoid unnecessary costs, when you are finished you can  update the solution to turn off automatic training.  For information about training costs, see Amazon Personalize pricing.  Creates the configuration for training a model (creating a solution version). This configuration includes the recipe to use for model training and optional training configuration, such as columns to use in training and feature transformation parameters. For more information about configuring a solution, see Creating and configuring a solution.   By default, new solutions use automatic training to create solution versions every 7 days. You can change the training frequency. Automatic solution version creation starts within one hour after the solution is ACTIVE. If you manually create a solution version within the hour, the solution skips the first automatic training. For more information, see Configuring automatic training.  To turn off automatic training, set performAutoTraining to false. If you turn off automatic training, you must manually create a solution version by calling the CreateSolutionVersion operation. After training starts, you can get the solution version's Amazon Resource Name (ARN) with the ListSolutionVersions API operation.  To get its status, use the DescribeSolutionVersion.  After training completes you can evaluate model accuracy by calling GetSolutionMetrics. When you are satisfied with the solution version, you deploy it using CreateCampaign. The campaign provides recommendations to a client through the GetRecommendations API.  Amazon Personalize doesn't support configuring the hpoObjective  for solution hyperparameter optimization at this time.   Status  A solution can be in one of the following states:   CREATE PENDING > CREATE IN_PROGRESS > ACTIVE -or- CREATE FAILED   DELETE PENDING > DELETE IN_PROGRESS   To get the status of the solution, call DescribeSolution. If you use manual training, the status must be ACTIVE before you call CreateSolutionVersion.  Related APIs     UpdateSolution     ListSolutions     CreateSolutionVersion     DescribeSolution     DeleteSolution       ListSolutionVersions     DescribeSolutionVersion
    @Sendable
    @inlinable
    public func createSolution(_ input: CreateSolutionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateSolutionResponse {
        try await self.client.execute(
            operation: "CreateSolution", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  By default, all new solutions use automatic training. With automatic training, you incur training costs while your solution is active. To avoid unnecessary costs, when you are finished you can  update the solution to turn off automatic training.  For information about training costs, see Amazon Personalize pricing.  Creates the configuration for training a model (creating a solution version). This configuration includes the recipe to use for model training and optional training configuration, such as columns to use in training and feature transformation parameters. For more information about configuring a solution, see Creating and configuring a solution.   By default, new solutions use automatic training to create solution versions every 7 days. You can change the training frequency. Automatic solution version creation starts within one hour after the solution is ACTIVE. If you manually create a solution version within the hour, the solution skips the first automatic training. For more information, see Configuring automatic training.  To turn off automatic training, set performAutoTraining to false. If you turn off automatic training, you must manually create a solution version by calling the CreateSolutionVersion operation. After training starts, you can get the solution version's Amazon Resource Name (ARN) with the ListSolutionVersions API operation.  To get its status, use the DescribeSolutionVersion.  After training completes you can evaluate model accuracy by calling GetSolutionMetrics. When you are satisfied with the solution version, you deploy it using CreateCampaign. The campaign provides recommendations to a client through the GetRecommendations API.  Amazon Personalize doesn't support configuring the hpoObjective  for solution hyperparameter optimization at this time.   Status  A solution can be in one of the following states:   CREATE PENDING > CREATE IN_PROGRESS > ACTIVE -or- CREATE FAILED   DELETE PENDING > DELETE IN_PROGRESS   To get the status of the solution, call DescribeSolution. If you use manual training, the status must be ACTIVE before you call CreateSolutionVersion.  Related APIs     UpdateSolution     ListSolutions     CreateSolutionVersion     DescribeSolution     DeleteSolution       ListSolutionVersions     DescribeSolutionVersion
    ///
    /// Parameters:
    ///   - datasetGroupArn: The Amazon Resource Name (ARN) of the dataset group that provides the training data.
    ///   - eventType: When your have multiple event types (using an EVENT_TYPE schema field), this parameter specifies which event type (for example, 'click' or 'like') is used for training the model. If you do not provide an eventType, Amazon Personalize will use all interactions for training with equal weight regardless of type.
    ///   - name: The name for the solution.
    ///   - performAutoML:  We don't recommend enabling automated machine learning. Instead, match your use case to the available Amazon Personalize  recipes. For more information, see Choosing a recipe.  Whether to perform automated machine learning (AutoML). The default is false. For this case, you must specify recipeArn. When set to true, Amazon Personalize analyzes your training data and selects the optimal USER_PERSONALIZATION recipe and hyperparameters. In this case, you must omit recipeArn. Amazon Personalize determines the optimal recipe by running tests with different values for the hyperparameters. AutoML lengthens the training process as compared to selecting a specific recipe.
    ///   - performAutoTraining: Whether the solution uses automatic training to create new solution versions (trained models). The default is True and the solution automatically creates new solution versions every 7 days. You can change the training frequency by specifying a schedulingExpression in the AutoTrainingConfig as part of solution configuration. For more information about automatic training, see Configuring automatic training.  Automatic solution version creation starts within one hour after the solution is ACTIVE. If you manually create a solution version within the hour, the solution skips the first automatic training.   After training starts, you can get the solution version's Amazon Resource Name (ARN) with the ListSolutionVersions API operation.  To get its status, use the DescribeSolutionVersion.
    ///   - performHPO: Whether to perform hyperparameter optimization (HPO) on the specified or selected recipe. The default is false. When performing AutoML, this parameter is always true and you should not set it to false.
    ///   - recipeArn: The Amazon Resource Name (ARN) of the recipe to use for model training. This is required when performAutoML is false. For information about different Amazon Personalize recipes and their ARNs,  see Choosing a recipe.
    ///   - solutionConfig: The configuration properties for the solution. When performAutoML is set to true, Amazon Personalize only evaluates the autoMLConfig section of the solution configuration.  Amazon Personalize doesn't support configuring the hpoObjective  at this time.
    ///   - tags: A list of tags to apply to the solution.
    ///   - logger: Logger use during operation
    @inlinable
    public func createSolution(
        datasetGroupArn: String,
        eventType: String? = nil,
        name: String,
        performAutoML: Bool? = nil,
        performAutoTraining: Bool? = nil,
        performHPO: Bool? = nil,
        recipeArn: String? = nil,
        solutionConfig: SolutionConfig? = nil,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateSolutionResponse {
        let input = CreateSolutionRequest(
            datasetGroupArn: datasetGroupArn, 
            eventType: eventType, 
            name: name, 
            performAutoML: performAutoML, 
            performAutoTraining: performAutoTraining, 
            performHPO: performHPO, 
            recipeArn: recipeArn, 
            solutionConfig: solutionConfig, 
            tags: tags
        )
        return try await self.createSolution(input, logger: logger)
    }

    /// Trains or retrains an active solution in a Custom dataset group. A solution is created using the CreateSolution operation and must be in the ACTIVE state before calling CreateSolutionVersion. A new version of the solution is created every time you call this operation.  Status  A solution version can be in one of the following states:   CREATE PENDING   CREATE IN_PROGRESS   ACTIVE   CREATE FAILED   CREATE STOPPING   CREATE STOPPED   To get the status of the version, call DescribeSolutionVersion. Wait until the status shows as ACTIVE before calling CreateCampaign. If the status shows as CREATE FAILED, the response includes a failureReason key, which describes why the job failed.  Related APIs     ListSolutionVersions     DescribeSolutionVersion     ListSolutions     CreateSolution     DescribeSolution     DeleteSolution
    @Sendable
    @inlinable
    public func createSolutionVersion(_ input: CreateSolutionVersionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateSolutionVersionResponse {
        try await self.client.execute(
            operation: "CreateSolutionVersion", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Trains or retrains an active solution in a Custom dataset group. A solution is created using the CreateSolution operation and must be in the ACTIVE state before calling CreateSolutionVersion. A new version of the solution is created every time you call this operation.  Status  A solution version can be in one of the following states:   CREATE PENDING   CREATE IN_PROGRESS   ACTIVE   CREATE FAILED   CREATE STOPPING   CREATE STOPPED   To get the status of the version, call DescribeSolutionVersion. Wait until the status shows as ACTIVE before calling CreateCampaign. If the status shows as CREATE FAILED, the response includes a failureReason key, which describes why the job failed.  Related APIs     ListSolutionVersions     DescribeSolutionVersion     ListSolutions     CreateSolution     DescribeSolution     DeleteSolution
    ///
    /// Parameters:
    ///   - name: The name of the solution version.
    ///   - solutionArn: The Amazon Resource Name (ARN) of the solution containing the training configuration information.
    ///   - tags: A list of tags to apply to the solution version.
    ///   - trainingMode: The scope of training to be performed when creating the solution version.  The default is FULL. This creates a completely new model based on the entirety  of the training data from the datasets in your dataset group.  If you use User-Personalization, you can specify a training mode of UPDATE. This updates the model to consider new items for recommendations. It is not a full retraining. You should still complete a full retraining weekly. If you specify UPDATE, Amazon Personalize will stop automatic updates for the solution version. To resume updates, create a new solution with training mode set to FULL and deploy it in a campaign.  For more information about automatic updates, see  Automatic updates.  The UPDATE option can only be used when you already have an active solution version created from the input solution using the FULL option and the input solution was trained with the  User-Personalization recipe or the legacy HRNN-Coldstart recipe.
    ///   - logger: Logger use during operation
    @inlinable
    public func createSolutionVersion(
        name: String? = nil,
        solutionArn: String,
        tags: [Tag]? = nil,
        trainingMode: TrainingMode? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateSolutionVersionResponse {
        let input = CreateSolutionVersionRequest(
            name: name, 
            solutionArn: solutionArn, 
            tags: tags, 
            trainingMode: trainingMode
        )
        return try await self.createSolutionVersion(input, logger: logger)
    }

    /// Removes a campaign by deleting the solution deployment. The solution that the campaign is based on is not deleted and can be redeployed when needed. A deleted campaign can no longer be specified in a GetRecommendations request. For information on creating campaigns, see CreateCampaign.
    @Sendable
    @inlinable
    public func deleteCampaign(_ input: DeleteCampaignRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteCampaign", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Removes a campaign by deleting the solution deployment. The solution that the campaign is based on is not deleted and can be redeployed when needed. A deleted campaign can no longer be specified in a GetRecommendations request. For information on creating campaigns, see CreateCampaign.
    ///
    /// Parameters:
    ///   - campaignArn: The Amazon Resource Name (ARN) of the campaign to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteCampaign(
        campaignArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteCampaignRequest(
            campaignArn: campaignArn
        )
        return try await self.deleteCampaign(input, logger: logger)
    }

    /// Deletes a dataset. You can't delete a dataset if an associated DatasetImportJob or SolutionVersion is in the CREATE PENDING or IN PROGRESS state. For more information about deleting datasets, see Deleting a dataset.
    @Sendable
    @inlinable
    public func deleteDataset(_ input: DeleteDatasetRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteDataset", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a dataset. You can't delete a dataset if an associated DatasetImportJob or SolutionVersion is in the CREATE PENDING or IN PROGRESS state. For more information about deleting datasets, see Deleting a dataset.
    ///
    /// Parameters:
    ///   - datasetArn: The Amazon Resource Name (ARN) of the dataset to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteDataset(
        datasetArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteDatasetRequest(
            datasetArn: datasetArn
        )
        return try await self.deleteDataset(input, logger: logger)
    }

    /// Deletes a dataset group. Before you delete a dataset group, you must delete the following:   All associated event trackers.   All associated solutions.   All datasets in the dataset group.
    @Sendable
    @inlinable
    public func deleteDatasetGroup(_ input: DeleteDatasetGroupRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteDatasetGroup", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a dataset group. Before you delete a dataset group, you must delete the following:   All associated event trackers.   All associated solutions.   All datasets in the dataset group.
    ///
    /// Parameters:
    ///   - datasetGroupArn: The ARN of the dataset group to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteDatasetGroup(
        datasetGroupArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteDatasetGroupRequest(
            datasetGroupArn: datasetGroupArn
        )
        return try await self.deleteDatasetGroup(input, logger: logger)
    }

    /// Deletes the event tracker. Does not delete the dataset from the dataset group. For more information on event trackers, see CreateEventTracker.
    @Sendable
    @inlinable
    public func deleteEventTracker(_ input: DeleteEventTrackerRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteEventTracker", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the event tracker. Does not delete the dataset from the dataset group. For more information on event trackers, see CreateEventTracker.
    ///
    /// Parameters:
    ///   - eventTrackerArn: The Amazon Resource Name (ARN) of the event tracker to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteEventTracker(
        eventTrackerArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteEventTrackerRequest(
            eventTrackerArn: eventTrackerArn
        )
        return try await self.deleteEventTracker(input, logger: logger)
    }

    /// Deletes a filter.
    @Sendable
    @inlinable
    public func deleteFilter(_ input: DeleteFilterRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteFilter", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a filter.
    ///
    /// Parameters:
    ///   - filterArn: The ARN of the filter to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteFilter(
        filterArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteFilterRequest(
            filterArn: filterArn
        )
        return try await self.deleteFilter(input, logger: logger)
    }

    /// Deletes a metric attribution.
    @Sendable
    @inlinable
    public func deleteMetricAttribution(_ input: DeleteMetricAttributionRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteMetricAttribution", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a metric attribution.
    ///
    /// Parameters:
    ///   - metricAttributionArn: The metric attribution's Amazon Resource Name (ARN).
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteMetricAttribution(
        metricAttributionArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteMetricAttributionRequest(
            metricAttributionArn: metricAttributionArn
        )
        return try await self.deleteMetricAttribution(input, logger: logger)
    }

    /// Deactivates and removes a recommender. A deleted recommender can no longer be specified in a GetRecommendations request.
    @Sendable
    @inlinable
    public func deleteRecommender(_ input: DeleteRecommenderRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteRecommender", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deactivates and removes a recommender. A deleted recommender can no longer be specified in a GetRecommendations request.
    ///
    /// Parameters:
    ///   - recommenderArn: The Amazon Resource Name (ARN) of the recommender to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteRecommender(
        recommenderArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteRecommenderRequest(
            recommenderArn: recommenderArn
        )
        return try await self.deleteRecommender(input, logger: logger)
    }

    /// Deletes a schema. Before deleting a schema, you must delete all datasets referencing the schema. For more information on schemas, see CreateSchema.
    @Sendable
    @inlinable
    public func deleteSchema(_ input: DeleteSchemaRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteSchema", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a schema. Before deleting a schema, you must delete all datasets referencing the schema. For more information on schemas, see CreateSchema.
    ///
    /// Parameters:
    ///   - schemaArn: The Amazon Resource Name (ARN) of the schema to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteSchema(
        schemaArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteSchemaRequest(
            schemaArn: schemaArn
        )
        return try await self.deleteSchema(input, logger: logger)
    }

    /// Deletes all versions of a solution and the Solution object itself. Before deleting a solution, you must delete all campaigns based on the solution. To determine what campaigns are using the solution, call ListCampaigns and supply the Amazon Resource Name (ARN) of the solution. You can't delete a solution if an associated SolutionVersion is in the CREATE PENDING or IN PROGRESS state. For more information on solutions, see CreateSolution.
    @Sendable
    @inlinable
    public func deleteSolution(_ input: DeleteSolutionRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteSolution", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes all versions of a solution and the Solution object itself. Before deleting a solution, you must delete all campaigns based on the solution. To determine what campaigns are using the solution, call ListCampaigns and supply the Amazon Resource Name (ARN) of the solution. You can't delete a solution if an associated SolutionVersion is in the CREATE PENDING or IN PROGRESS state. For more information on solutions, see CreateSolution.
    ///
    /// Parameters:
    ///   - solutionArn: The ARN of the solution to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteSolution(
        solutionArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteSolutionRequest(
            solutionArn: solutionArn
        )
        return try await self.deleteSolution(input, logger: logger)
    }

    /// Describes the given algorithm.
    @Sendable
    @inlinable
    public func describeAlgorithm(_ input: DescribeAlgorithmRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeAlgorithmResponse {
        try await self.client.execute(
            operation: "DescribeAlgorithm", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes the given algorithm.
    ///
    /// Parameters:
    ///   - algorithmArn: The Amazon Resource Name (ARN) of the algorithm to describe.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeAlgorithm(
        algorithmArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeAlgorithmResponse {
        let input = DescribeAlgorithmRequest(
            algorithmArn: algorithmArn
        )
        return try await self.describeAlgorithm(input, logger: logger)
    }

    /// Gets the properties of a batch inference job including name, Amazon Resource Name (ARN), status, input and output configurations, and the ARN of the solution version used to generate the recommendations.
    @Sendable
    @inlinable
    public func describeBatchInferenceJob(_ input: DescribeBatchInferenceJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeBatchInferenceJobResponse {
        try await self.client.execute(
            operation: "DescribeBatchInferenceJob", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets the properties of a batch inference job including name, Amazon Resource Name (ARN), status, input and output configurations, and the ARN of the solution version used to generate the recommendations.
    ///
    /// Parameters:
    ///   - batchInferenceJobArn: The ARN of the batch inference job to describe.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeBatchInferenceJob(
        batchInferenceJobArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeBatchInferenceJobResponse {
        let input = DescribeBatchInferenceJobRequest(
            batchInferenceJobArn: batchInferenceJobArn
        )
        return try await self.describeBatchInferenceJob(input, logger: logger)
    }

    /// Gets the properties of a batch segment job including name, Amazon Resource Name (ARN), status, input and output configurations, and the ARN of the solution version used to generate segments.
    @Sendable
    @inlinable
    public func describeBatchSegmentJob(_ input: DescribeBatchSegmentJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeBatchSegmentJobResponse {
        try await self.client.execute(
            operation: "DescribeBatchSegmentJob", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets the properties of a batch segment job including name, Amazon Resource Name (ARN), status, input and output configurations, and the ARN of the solution version used to generate segments.
    ///
    /// Parameters:
    ///   - batchSegmentJobArn: The ARN of the batch segment job to describe.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeBatchSegmentJob(
        batchSegmentJobArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeBatchSegmentJobResponse {
        let input = DescribeBatchSegmentJobRequest(
            batchSegmentJobArn: batchSegmentJobArn
        )
        return try await self.describeBatchSegmentJob(input, logger: logger)
    }

    /// Describes the given campaign, including its status. A campaign can be in one of the following states:   CREATE PENDING > CREATE IN_PROGRESS > ACTIVE -or- CREATE FAILED   DELETE PENDING > DELETE IN_PROGRESS   When the status is CREATE FAILED, the response includes the failureReason key, which describes why. For more information on campaigns, see CreateCampaign.
    @Sendable
    @inlinable
    public func describeCampaign(_ input: DescribeCampaignRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeCampaignResponse {
        try await self.client.execute(
            operation: "DescribeCampaign", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes the given campaign, including its status. A campaign can be in one of the following states:   CREATE PENDING > CREATE IN_PROGRESS > ACTIVE -or- CREATE FAILED   DELETE PENDING > DELETE IN_PROGRESS   When the status is CREATE FAILED, the response includes the failureReason key, which describes why. For more information on campaigns, see CreateCampaign.
    ///
    /// Parameters:
    ///   - campaignArn: The Amazon Resource Name (ARN) of the campaign.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeCampaign(
        campaignArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeCampaignResponse {
        let input = DescribeCampaignRequest(
            campaignArn: campaignArn
        )
        return try await self.describeCampaign(input, logger: logger)
    }

    /// Describes the data deletion job created by CreateDataDeletionJob, including the job status.
    @Sendable
    @inlinable
    public func describeDataDeletionJob(_ input: DescribeDataDeletionJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeDataDeletionJobResponse {
        try await self.client.execute(
            operation: "DescribeDataDeletionJob", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes the data deletion job created by CreateDataDeletionJob, including the job status.
    ///
    /// Parameters:
    ///   - dataDeletionJobArn: The Amazon Resource Name (ARN) of the data deletion job.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeDataDeletionJob(
        dataDeletionJobArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeDataDeletionJobResponse {
        let input = DescribeDataDeletionJobRequest(
            dataDeletionJobArn: dataDeletionJobArn
        )
        return try await self.describeDataDeletionJob(input, logger: logger)
    }

    /// Describes the given dataset. For more information on datasets, see CreateDataset.
    @Sendable
    @inlinable
    public func describeDataset(_ input: DescribeDatasetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeDatasetResponse {
        try await self.client.execute(
            operation: "DescribeDataset", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes the given dataset. For more information on datasets, see CreateDataset.
    ///
    /// Parameters:
    ///   - datasetArn: The Amazon Resource Name (ARN) of the dataset to describe.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeDataset(
        datasetArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeDatasetResponse {
        let input = DescribeDatasetRequest(
            datasetArn: datasetArn
        )
        return try await self.describeDataset(input, logger: logger)
    }

    /// Describes the dataset export job created by CreateDatasetExportJob, including the export job status.
    @Sendable
    @inlinable
    public func describeDatasetExportJob(_ input: DescribeDatasetExportJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeDatasetExportJobResponse {
        try await self.client.execute(
            operation: "DescribeDatasetExportJob", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes the dataset export job created by CreateDatasetExportJob, including the export job status.
    ///
    /// Parameters:
    ///   - datasetExportJobArn: The Amazon Resource Name (ARN) of the dataset export job to describe.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeDatasetExportJob(
        datasetExportJobArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeDatasetExportJobResponse {
        let input = DescribeDatasetExportJobRequest(
            datasetExportJobArn: datasetExportJobArn
        )
        return try await self.describeDatasetExportJob(input, logger: logger)
    }

    /// Describes the given dataset group. For more information on dataset groups, see CreateDatasetGroup.
    @Sendable
    @inlinable
    public func describeDatasetGroup(_ input: DescribeDatasetGroupRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeDatasetGroupResponse {
        try await self.client.execute(
            operation: "DescribeDatasetGroup", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes the given dataset group. For more information on dataset groups, see CreateDatasetGroup.
    ///
    /// Parameters:
    ///   - datasetGroupArn: The Amazon Resource Name (ARN) of the dataset group to describe.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeDatasetGroup(
        datasetGroupArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeDatasetGroupResponse {
        let input = DescribeDatasetGroupRequest(
            datasetGroupArn: datasetGroupArn
        )
        return try await self.describeDatasetGroup(input, logger: logger)
    }

    /// Describes the dataset import job created by CreateDatasetImportJob, including the import job status.
    @Sendable
    @inlinable
    public func describeDatasetImportJob(_ input: DescribeDatasetImportJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeDatasetImportJobResponse {
        try await self.client.execute(
            operation: "DescribeDatasetImportJob", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes the dataset import job created by CreateDatasetImportJob, including the import job status.
    ///
    /// Parameters:
    ///   - datasetImportJobArn: The Amazon Resource Name (ARN) of the dataset import job to describe.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeDatasetImportJob(
        datasetImportJobArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeDatasetImportJobResponse {
        let input = DescribeDatasetImportJobRequest(
            datasetImportJobArn: datasetImportJobArn
        )
        return try await self.describeDatasetImportJob(input, logger: logger)
    }

    /// Describes an event tracker. The response includes the trackingId and status of the event tracker. For more information on event trackers, see CreateEventTracker.
    @Sendable
    @inlinable
    public func describeEventTracker(_ input: DescribeEventTrackerRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeEventTrackerResponse {
        try await self.client.execute(
            operation: "DescribeEventTracker", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes an event tracker. The response includes the trackingId and status of the event tracker. For more information on event trackers, see CreateEventTracker.
    ///
    /// Parameters:
    ///   - eventTrackerArn: The Amazon Resource Name (ARN) of the event tracker to describe.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeEventTracker(
        eventTrackerArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeEventTrackerResponse {
        let input = DescribeEventTrackerRequest(
            eventTrackerArn: eventTrackerArn
        )
        return try await self.describeEventTracker(input, logger: logger)
    }

    /// Describes the given feature transformation.
    @Sendable
    @inlinable
    public func describeFeatureTransformation(_ input: DescribeFeatureTransformationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeFeatureTransformationResponse {
        try await self.client.execute(
            operation: "DescribeFeatureTransformation", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes the given feature transformation.
    ///
    /// Parameters:
    ///   - featureTransformationArn: The Amazon Resource Name (ARN) of the feature transformation to describe.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeFeatureTransformation(
        featureTransformationArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeFeatureTransformationResponse {
        let input = DescribeFeatureTransformationRequest(
            featureTransformationArn: featureTransformationArn
        )
        return try await self.describeFeatureTransformation(input, logger: logger)
    }

    /// Describes a filter's properties.
    @Sendable
    @inlinable
    public func describeFilter(_ input: DescribeFilterRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeFilterResponse {
        try await self.client.execute(
            operation: "DescribeFilter", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes a filter's properties.
    ///
    /// Parameters:
    ///   - filterArn: The ARN of the filter to describe.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeFilter(
        filterArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeFilterResponse {
        let input = DescribeFilterRequest(
            filterArn: filterArn
        )
        return try await self.describeFilter(input, logger: logger)
    }

    /// Describes a metric attribution.
    @Sendable
    @inlinable
    public func describeMetricAttribution(_ input: DescribeMetricAttributionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeMetricAttributionResponse {
        try await self.client.execute(
            operation: "DescribeMetricAttribution", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes a metric attribution.
    ///
    /// Parameters:
    ///   - metricAttributionArn: The metric attribution's Amazon Resource Name (ARN).
    ///   - logger: Logger use during operation
    @inlinable
    public func describeMetricAttribution(
        metricAttributionArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeMetricAttributionResponse {
        let input = DescribeMetricAttributionRequest(
            metricAttributionArn: metricAttributionArn
        )
        return try await self.describeMetricAttribution(input, logger: logger)
    }

    /// Describes a recipe. A recipe contains three items:   An algorithm that trains a model.   Hyperparameters that govern the training.   Feature transformation information for modifying the input data before training.   Amazon Personalize provides a set of predefined recipes. You specify a recipe when you create a solution with the CreateSolution API. CreateSolution trains a model by using the algorithm in the specified recipe and a training dataset. The solution, when deployed as a campaign, can provide recommendations using the GetRecommendations API.
    @Sendable
    @inlinable
    public func describeRecipe(_ input: DescribeRecipeRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeRecipeResponse {
        try await self.client.execute(
            operation: "DescribeRecipe", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes a recipe. A recipe contains three items:   An algorithm that trains a model.   Hyperparameters that govern the training.   Feature transformation information for modifying the input data before training.   Amazon Personalize provides a set of predefined recipes. You specify a recipe when you create a solution with the CreateSolution API. CreateSolution trains a model by using the algorithm in the specified recipe and a training dataset. The solution, when deployed as a campaign, can provide recommendations using the GetRecommendations API.
    ///
    /// Parameters:
    ///   - recipeArn: The Amazon Resource Name (ARN) of the recipe to describe.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeRecipe(
        recipeArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeRecipeResponse {
        let input = DescribeRecipeRequest(
            recipeArn: recipeArn
        )
        return try await self.describeRecipe(input, logger: logger)
    }

    /// Describes the given recommender, including its status. A recommender can be in one of the following states:   CREATE PENDING > CREATE IN_PROGRESS > ACTIVE -or- CREATE FAILED   STOP PENDING > STOP IN_PROGRESS > INACTIVE > START PENDING > START IN_PROGRESS > ACTIVE   DELETE PENDING > DELETE IN_PROGRESS   When the status is CREATE FAILED, the response includes the failureReason key, which describes why. The modelMetrics key is null when the recommender is being created or deleted. For more information on recommenders, see CreateRecommender.
    @Sendable
    @inlinable
    public func describeRecommender(_ input: DescribeRecommenderRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeRecommenderResponse {
        try await self.client.execute(
            operation: "DescribeRecommender", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes the given recommender, including its status. A recommender can be in one of the following states:   CREATE PENDING > CREATE IN_PROGRESS > ACTIVE -or- CREATE FAILED   STOP PENDING > STOP IN_PROGRESS > INACTIVE > START PENDING > START IN_PROGRESS > ACTIVE   DELETE PENDING > DELETE IN_PROGRESS   When the status is CREATE FAILED, the response includes the failureReason key, which describes why. The modelMetrics key is null when the recommender is being created or deleted. For more information on recommenders, see CreateRecommender.
    ///
    /// Parameters:
    ///   - recommenderArn: The Amazon Resource Name (ARN) of the recommender to describe.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeRecommender(
        recommenderArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeRecommenderResponse {
        let input = DescribeRecommenderRequest(
            recommenderArn: recommenderArn
        )
        return try await self.describeRecommender(input, logger: logger)
    }

    /// Describes a schema. For more information on schemas, see CreateSchema.
    @Sendable
    @inlinable
    public func describeSchema(_ input: DescribeSchemaRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeSchemaResponse {
        try await self.client.execute(
            operation: "DescribeSchema", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes a schema. For more information on schemas, see CreateSchema.
    ///
    /// Parameters:
    ///   - schemaArn: The Amazon Resource Name (ARN) of the schema to retrieve.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeSchema(
        schemaArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeSchemaResponse {
        let input = DescribeSchemaRequest(
            schemaArn: schemaArn
        )
        return try await self.describeSchema(input, logger: logger)
    }

    /// Describes a solution. For more information on solutions, see CreateSolution.
    @Sendable
    @inlinable
    public func describeSolution(_ input: DescribeSolutionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeSolutionResponse {
        try await self.client.execute(
            operation: "DescribeSolution", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes a solution. For more information on solutions, see CreateSolution.
    ///
    /// Parameters:
    ///   - solutionArn: The Amazon Resource Name (ARN) of the solution to describe.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeSolution(
        solutionArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeSolutionResponse {
        let input = DescribeSolutionRequest(
            solutionArn: solutionArn
        )
        return try await self.describeSolution(input, logger: logger)
    }

    /// Describes a specific version of a solution. For more information on solutions, see CreateSolution
    @Sendable
    @inlinable
    public func describeSolutionVersion(_ input: DescribeSolutionVersionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeSolutionVersionResponse {
        try await self.client.execute(
            operation: "DescribeSolutionVersion", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes a specific version of a solution. For more information on solutions, see CreateSolution
    ///
    /// Parameters:
    ///   - solutionVersionArn: The Amazon Resource Name (ARN) of the solution version.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeSolutionVersion(
        solutionVersionArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeSolutionVersionResponse {
        let input = DescribeSolutionVersionRequest(
            solutionVersionArn: solutionVersionArn
        )
        return try await self.describeSolutionVersion(input, logger: logger)
    }

    /// Gets the metrics for the specified solution version.
    @Sendable
    @inlinable
    public func getSolutionMetrics(_ input: GetSolutionMetricsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetSolutionMetricsResponse {
        try await self.client.execute(
            operation: "GetSolutionMetrics", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets the metrics for the specified solution version.
    ///
    /// Parameters:
    ///   - solutionVersionArn: The Amazon Resource Name (ARN) of the solution version for which to get metrics.
    ///   - logger: Logger use during operation
    @inlinable
    public func getSolutionMetrics(
        solutionVersionArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetSolutionMetricsResponse {
        let input = GetSolutionMetricsRequest(
            solutionVersionArn: solutionVersionArn
        )
        return try await self.getSolutionMetrics(input, logger: logger)
    }

    /// Gets a list of the batch inference jobs that have been performed off of a solution version.
    @Sendable
    @inlinable
    public func listBatchInferenceJobs(_ input: ListBatchInferenceJobsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListBatchInferenceJobsResponse {
        try await self.client.execute(
            operation: "ListBatchInferenceJobs", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets a list of the batch inference jobs that have been performed off of a solution version.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of batch inference job results to return in each page. The default value is 100.
    ///   - nextToken: The token to request the next page of results.
    ///   - solutionVersionArn: The Amazon Resource Name (ARN) of the solution version from which the batch inference jobs were created.
    ///   - logger: Logger use during operation
    @inlinable
    public func listBatchInferenceJobs(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        solutionVersionArn: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListBatchInferenceJobsResponse {
        let input = ListBatchInferenceJobsRequest(
            maxResults: maxResults, 
            nextToken: nextToken, 
            solutionVersionArn: solutionVersionArn
        )
        return try await self.listBatchInferenceJobs(input, logger: logger)
    }

    /// Gets a list of the batch segment jobs that have been performed off of a solution version that you specify.
    @Sendable
    @inlinable
    public func listBatchSegmentJobs(_ input: ListBatchSegmentJobsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListBatchSegmentJobsResponse {
        try await self.client.execute(
            operation: "ListBatchSegmentJobs", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets a list of the batch segment jobs that have been performed off of a solution version that you specify.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of batch segment job results to return in each page. The default value is 100.
    ///   - nextToken: The token to request the next page of results.
    ///   - solutionVersionArn: The Amazon Resource Name (ARN) of the solution version that the batch segment jobs used to generate batch segments.
    ///   - logger: Logger use during operation
    @inlinable
    public func listBatchSegmentJobs(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        solutionVersionArn: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListBatchSegmentJobsResponse {
        let input = ListBatchSegmentJobsRequest(
            maxResults: maxResults, 
            nextToken: nextToken, 
            solutionVersionArn: solutionVersionArn
        )
        return try await self.listBatchSegmentJobs(input, logger: logger)
    }

    /// Returns a list of campaigns that use the given solution. When a solution is not specified, all the campaigns associated with the account are listed. The response provides the properties for each campaign, including the Amazon Resource Name (ARN). For more information on campaigns, see CreateCampaign.
    @Sendable
    @inlinable
    public func listCampaigns(_ input: ListCampaignsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListCampaignsResponse {
        try await self.client.execute(
            operation: "ListCampaigns", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a list of campaigns that use the given solution. When a solution is not specified, all the campaigns associated with the account are listed. The response provides the properties for each campaign, including the Amazon Resource Name (ARN). For more information on campaigns, see CreateCampaign.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of campaigns to return.
    ///   - nextToken: A token returned from the previous call to ListCampaigns for getting the next set of campaigns (if they exist).
    ///   - solutionArn: The Amazon Resource Name (ARN) of the solution to list the campaigns for. When a solution is not specified, all the campaigns associated with the account are listed.
    ///   - logger: Logger use during operation
    @inlinable
    public func listCampaigns(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        solutionArn: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListCampaignsResponse {
        let input = ListCampaignsRequest(
            maxResults: maxResults, 
            nextToken: nextToken, 
            solutionArn: solutionArn
        )
        return try await self.listCampaigns(input, logger: logger)
    }

    /// Returns a list of data deletion jobs for a dataset group ordered by creation time, with the most recent first. When a dataset group is not specified, all the data deletion jobs associated with the account are listed. The response provides the properties for each job, including the Amazon Resource Name (ARN). For more information on data deletion jobs, see Deleting users.
    @Sendable
    @inlinable
    public func listDataDeletionJobs(_ input: ListDataDeletionJobsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListDataDeletionJobsResponse {
        try await self.client.execute(
            operation: "ListDataDeletionJobs", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a list of data deletion jobs for a dataset group ordered by creation time, with the most recent first. When a dataset group is not specified, all the data deletion jobs associated with the account are listed. The response provides the properties for each job, including the Amazon Resource Name (ARN). For more information on data deletion jobs, see Deleting users.
    ///
    /// Parameters:
    ///   - datasetGroupArn: The Amazon Resource Name (ARN) of the dataset group to list data deletion jobs for.
    ///   - maxResults: The maximum number of data deletion jobs to return.
    ///   - nextToken: A token returned from the previous call to ListDataDeletionJobs for getting the next set of jobs (if they exist).
    ///   - logger: Logger use during operation
    @inlinable
    public func listDataDeletionJobs(
        datasetGroupArn: String? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListDataDeletionJobsResponse {
        let input = ListDataDeletionJobsRequest(
            datasetGroupArn: datasetGroupArn, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listDataDeletionJobs(input, logger: logger)
    }

    /// Returns a list of dataset export jobs that use the given dataset. When a dataset is not specified, all the dataset export jobs associated with the account are listed. The response provides the properties for each dataset export job, including the Amazon Resource Name (ARN). For more information on dataset export jobs, see CreateDatasetExportJob. For more information on datasets, see CreateDataset.
    @Sendable
    @inlinable
    public func listDatasetExportJobs(_ input: ListDatasetExportJobsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListDatasetExportJobsResponse {
        try await self.client.execute(
            operation: "ListDatasetExportJobs", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a list of dataset export jobs that use the given dataset. When a dataset is not specified, all the dataset export jobs associated with the account are listed. The response provides the properties for each dataset export job, including the Amazon Resource Name (ARN). For more information on dataset export jobs, see CreateDatasetExportJob. For more information on datasets, see CreateDataset.
    ///
    /// Parameters:
    ///   - datasetArn: The Amazon Resource Name (ARN) of the dataset to list the dataset export jobs for.
    ///   - maxResults: The maximum number of dataset export jobs to return.
    ///   - nextToken: A token returned from the previous call to ListDatasetExportJobs for getting the next set of dataset export jobs (if they exist).
    ///   - logger: Logger use during operation
    @inlinable
    public func listDatasetExportJobs(
        datasetArn: String? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListDatasetExportJobsResponse {
        let input = ListDatasetExportJobsRequest(
            datasetArn: datasetArn, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listDatasetExportJobs(input, logger: logger)
    }

    /// Returns a list of dataset groups. The response provides the properties for each dataset group, including the Amazon Resource Name (ARN). For more information on dataset groups, see CreateDatasetGroup.
    @Sendable
    @inlinable
    public func listDatasetGroups(_ input: ListDatasetGroupsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListDatasetGroupsResponse {
        try await self.client.execute(
            operation: "ListDatasetGroups", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a list of dataset groups. The response provides the properties for each dataset group, including the Amazon Resource Name (ARN). For more information on dataset groups, see CreateDatasetGroup.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of dataset groups to return.
    ///   - nextToken: A token returned from the previous call to ListDatasetGroups for getting the next set of dataset groups (if they exist).
    ///   - logger: Logger use during operation
    @inlinable
    public func listDatasetGroups(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListDatasetGroupsResponse {
        let input = ListDatasetGroupsRequest(
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listDatasetGroups(input, logger: logger)
    }

    /// Returns a list of dataset import jobs that use the given dataset. When a dataset is not specified, all the dataset import jobs associated with the account are listed. The response provides the properties for each dataset import job, including the Amazon Resource Name (ARN). For more information on dataset import jobs, see CreateDatasetImportJob. For more information on datasets, see CreateDataset.
    @Sendable
    @inlinable
    public func listDatasetImportJobs(_ input: ListDatasetImportJobsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListDatasetImportJobsResponse {
        try await self.client.execute(
            operation: "ListDatasetImportJobs", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a list of dataset import jobs that use the given dataset. When a dataset is not specified, all the dataset import jobs associated with the account are listed. The response provides the properties for each dataset import job, including the Amazon Resource Name (ARN). For more information on dataset import jobs, see CreateDatasetImportJob. For more information on datasets, see CreateDataset.
    ///
    /// Parameters:
    ///   - datasetArn: The Amazon Resource Name (ARN) of the dataset to list the dataset import jobs for.
    ///   - maxResults: The maximum number of dataset import jobs to return.
    ///   - nextToken: A token returned from the previous call to ListDatasetImportJobs for getting the next set of dataset import jobs (if they exist).
    ///   - logger: Logger use during operation
    @inlinable
    public func listDatasetImportJobs(
        datasetArn: String? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListDatasetImportJobsResponse {
        let input = ListDatasetImportJobsRequest(
            datasetArn: datasetArn, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listDatasetImportJobs(input, logger: logger)
    }

    /// Returns the list of datasets contained in the given dataset group. The response provides the properties for each dataset, including the Amazon Resource Name (ARN). For more information on datasets, see CreateDataset.
    @Sendable
    @inlinable
    public func listDatasets(_ input: ListDatasetsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListDatasetsResponse {
        try await self.client.execute(
            operation: "ListDatasets", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the list of datasets contained in the given dataset group. The response provides the properties for each dataset, including the Amazon Resource Name (ARN). For more information on datasets, see CreateDataset.
    ///
    /// Parameters:
    ///   - datasetGroupArn: The Amazon Resource Name (ARN) of the dataset group that contains the datasets to list.
    ///   - maxResults: The maximum number of datasets to return.
    ///   - nextToken: A token returned from the previous call to ListDatasets for getting the next set of dataset import jobs (if they exist).
    ///   - logger: Logger use during operation
    @inlinable
    public func listDatasets(
        datasetGroupArn: String? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListDatasetsResponse {
        let input = ListDatasetsRequest(
            datasetGroupArn: datasetGroupArn, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listDatasets(input, logger: logger)
    }

    /// Returns the list of event trackers associated with the account. The response provides the properties for each event tracker, including the Amazon Resource Name (ARN) and tracking ID. For more information on event trackers, see CreateEventTracker.
    @Sendable
    @inlinable
    public func listEventTrackers(_ input: ListEventTrackersRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListEventTrackersResponse {
        try await self.client.execute(
            operation: "ListEventTrackers", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the list of event trackers associated with the account. The response provides the properties for each event tracker, including the Amazon Resource Name (ARN) and tracking ID. For more information on event trackers, see CreateEventTracker.
    ///
    /// Parameters:
    ///   - datasetGroupArn: The ARN of a dataset group used to filter the response.
    ///   - maxResults: The maximum number of event trackers to return.
    ///   - nextToken: A token returned from the previous call to ListEventTrackers for getting the next set of event trackers (if they exist).
    ///   - logger: Logger use during operation
    @inlinable
    public func listEventTrackers(
        datasetGroupArn: String? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListEventTrackersResponse {
        let input = ListEventTrackersRequest(
            datasetGroupArn: datasetGroupArn, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listEventTrackers(input, logger: logger)
    }

    /// Lists all filters that belong to a given dataset group.
    @Sendable
    @inlinable
    public func listFilters(_ input: ListFiltersRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListFiltersResponse {
        try await self.client.execute(
            operation: "ListFilters", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists all filters that belong to a given dataset group.
    ///
    /// Parameters:
    ///   - datasetGroupArn: The ARN of the dataset group that contains the filters.
    ///   - maxResults: The maximum number of filters to return.
    ///   - nextToken: A token returned from the previous call to ListFilters for getting the next set of filters (if they exist).
    ///   - logger: Logger use during operation
    @inlinable
    public func listFilters(
        datasetGroupArn: String? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListFiltersResponse {
        let input = ListFiltersRequest(
            datasetGroupArn: datasetGroupArn, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listFilters(input, logger: logger)
    }

    /// Lists the metrics for the metric attribution.
    @Sendable
    @inlinable
    public func listMetricAttributionMetrics(_ input: ListMetricAttributionMetricsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListMetricAttributionMetricsResponse {
        try await self.client.execute(
            operation: "ListMetricAttributionMetrics", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the metrics for the metric attribution.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of metrics to return in one page of results.
    ///   - metricAttributionArn: The Amazon Resource Name (ARN) of the metric attribution to retrieve attributes for.
    ///   - nextToken: Specify the pagination token from a previous request to retrieve the next page of results.
    ///   - logger: Logger use during operation
    @inlinable
    public func listMetricAttributionMetrics(
        maxResults: Int? = nil,
        metricAttributionArn: String? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListMetricAttributionMetricsResponse {
        let input = ListMetricAttributionMetricsRequest(
            maxResults: maxResults, 
            metricAttributionArn: metricAttributionArn, 
            nextToken: nextToken
        )
        return try await self.listMetricAttributionMetrics(input, logger: logger)
    }

    /// Lists metric attributions.
    @Sendable
    @inlinable
    public func listMetricAttributions(_ input: ListMetricAttributionsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListMetricAttributionsResponse {
        try await self.client.execute(
            operation: "ListMetricAttributions", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists metric attributions.
    ///
    /// Parameters:
    ///   - datasetGroupArn: The metric attributions' dataset group Amazon Resource Name (ARN).
    ///   - maxResults: The maximum number of metric attributions to return in one page of results.
    ///   - nextToken: Specify the pagination token from a previous request to retrieve the next page of results.
    ///   - logger: Logger use during operation
    @inlinable
    public func listMetricAttributions(
        datasetGroupArn: String? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListMetricAttributionsResponse {
        let input = ListMetricAttributionsRequest(
            datasetGroupArn: datasetGroupArn, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listMetricAttributions(input, logger: logger)
    }

    /// Returns a list of available recipes. The response provides the properties for each recipe, including the recipe's Amazon Resource Name (ARN).
    @Sendable
    @inlinable
    public func listRecipes(_ input: ListRecipesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListRecipesResponse {
        try await self.client.execute(
            operation: "ListRecipes", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a list of available recipes. The response provides the properties for each recipe, including the recipe's Amazon Resource Name (ARN).
    ///
    /// Parameters:
    ///   - domain:  Filters returned recipes by domain for a Domain dataset group. Only recipes (Domain dataset group use cases) for this domain are included in the response. If you don't specify a domain, all recipes are returned.
    ///   - maxResults: The maximum number of recipes to return.
    ///   - nextToken: A token returned from the previous call to ListRecipes for getting the next set of recipes (if they exist).
    ///   - recipeProvider: The default is SERVICE.
    ///   - logger: Logger use during operation
    @inlinable
    public func listRecipes(
        domain: Domain? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        recipeProvider: RecipeProvider? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListRecipesResponse {
        let input = ListRecipesRequest(
            domain: domain, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            recipeProvider: recipeProvider
        )
        return try await self.listRecipes(input, logger: logger)
    }

    /// Returns a list of recommenders in a given Domain dataset group. When a Domain dataset group is not specified, all the recommenders associated with the account are listed. The response provides the properties for each recommender, including the Amazon Resource Name (ARN). For more information on recommenders, see CreateRecommender.
    @Sendable
    @inlinable
    public func listRecommenders(_ input: ListRecommendersRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListRecommendersResponse {
        try await self.client.execute(
            operation: "ListRecommenders", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a list of recommenders in a given Domain dataset group. When a Domain dataset group is not specified, all the recommenders associated with the account are listed. The response provides the properties for each recommender, including the Amazon Resource Name (ARN). For more information on recommenders, see CreateRecommender.
    ///
    /// Parameters:
    ///   - datasetGroupArn: The Amazon Resource Name (ARN) of the Domain dataset group to list the recommenders for. When a Domain dataset group is not specified, all the recommenders associated with the account are listed.
    ///   - maxResults: The maximum number of recommenders to return.
    ///   - nextToken: A token returned from the previous call to ListRecommenders for getting the next set of recommenders (if they exist).
    ///   - logger: Logger use during operation
    @inlinable
    public func listRecommenders(
        datasetGroupArn: String? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListRecommendersResponse {
        let input = ListRecommendersRequest(
            datasetGroupArn: datasetGroupArn, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listRecommenders(input, logger: logger)
    }

    /// Returns the list of schemas associated with the account. The response provides the properties for each schema, including the Amazon Resource Name (ARN). For more information on schemas, see CreateSchema.
    @Sendable
    @inlinable
    public func listSchemas(_ input: ListSchemasRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListSchemasResponse {
        try await self.client.execute(
            operation: "ListSchemas", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the list of schemas associated with the account. The response provides the properties for each schema, including the Amazon Resource Name (ARN). For more information on schemas, see CreateSchema.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of schemas to return.
    ///   - nextToken: A token returned from the previous call to ListSchemas for getting the next set of schemas (if they exist).
    ///   - logger: Logger use during operation
    @inlinable
    public func listSchemas(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListSchemasResponse {
        let input = ListSchemasRequest(
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listSchemas(input, logger: logger)
    }

    /// Returns a list of solution versions for the given solution. When a solution is not specified, all the solution versions associated with the account are listed. The response provides the properties for each solution version, including the Amazon Resource Name (ARN).
    @Sendable
    @inlinable
    public func listSolutionVersions(_ input: ListSolutionVersionsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListSolutionVersionsResponse {
        try await self.client.execute(
            operation: "ListSolutionVersions", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a list of solution versions for the given solution. When a solution is not specified, all the solution versions associated with the account are listed. The response provides the properties for each solution version, including the Amazon Resource Name (ARN).
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of solution versions to return.
    ///   - nextToken: A token returned from the previous call to ListSolutionVersions for getting the next set of solution versions (if they exist).
    ///   - solutionArn: The Amazon Resource Name (ARN) of the solution.
    ///   - logger: Logger use during operation
    @inlinable
    public func listSolutionVersions(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        solutionArn: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListSolutionVersionsResponse {
        let input = ListSolutionVersionsRequest(
            maxResults: maxResults, 
            nextToken: nextToken, 
            solutionArn: solutionArn
        )
        return try await self.listSolutionVersions(input, logger: logger)
    }

    /// Returns a list of solutions in a given dataset group. When a dataset group is not specified, all the solutions associated with the account are listed. The response provides the properties for each solution, including the Amazon Resource Name (ARN). For more information on solutions, see CreateSolution.
    @Sendable
    @inlinable
    public func listSolutions(_ input: ListSolutionsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListSolutionsResponse {
        try await self.client.execute(
            operation: "ListSolutions", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a list of solutions in a given dataset group. When a dataset group is not specified, all the solutions associated with the account are listed. The response provides the properties for each solution, including the Amazon Resource Name (ARN). For more information on solutions, see CreateSolution.
    ///
    /// Parameters:
    ///   - datasetGroupArn: The Amazon Resource Name (ARN) of the dataset group.
    ///   - maxResults: The maximum number of solutions to return.
    ///   - nextToken: A token returned from the previous call to ListSolutions for getting the next set of solutions (if they exist).
    ///   - logger: Logger use during operation
    @inlinable
    public func listSolutions(
        datasetGroupArn: String? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListSolutionsResponse {
        let input = ListSolutionsRequest(
            datasetGroupArn: datasetGroupArn, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listSolutions(input, logger: logger)
    }

    /// Get a list of tags attached to a resource.
    @Sendable
    @inlinable
    public func listTagsForResource(_ input: ListTagsForResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListTagsForResourceResponse {
        try await self.client.execute(
            operation: "ListTagsForResource", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Get a list of tags attached to a resource.
    ///
    /// Parameters:
    ///   - resourceArn: The resource's Amazon Resource Name (ARN).
    ///   - logger: Logger use during operation
    @inlinable
    public func listTagsForResource(
        resourceArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListTagsForResourceResponse {
        let input = ListTagsForResourceRequest(
            resourceArn: resourceArn
        )
        return try await self.listTagsForResource(input, logger: logger)
    }

    /// Starts a recommender that is INACTIVE. Starting a recommender does not create any new models, but resumes billing and automatic retraining for the recommender.
    @Sendable
    @inlinable
    public func startRecommender(_ input: StartRecommenderRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StartRecommenderResponse {
        try await self.client.execute(
            operation: "StartRecommender", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Starts a recommender that is INACTIVE. Starting a recommender does not create any new models, but resumes billing and automatic retraining for the recommender.
    ///
    /// Parameters:
    ///   - recommenderArn: The Amazon Resource Name (ARN) of the recommender to start.
    ///   - logger: Logger use during operation
    @inlinable
    public func startRecommender(
        recommenderArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StartRecommenderResponse {
        let input = StartRecommenderRequest(
            recommenderArn: recommenderArn
        )
        return try await self.startRecommender(input, logger: logger)
    }

    /// Stops a recommender that is ACTIVE. Stopping a recommender halts billing and automatic retraining for the recommender.
    @Sendable
    @inlinable
    public func stopRecommender(_ input: StopRecommenderRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StopRecommenderResponse {
        try await self.client.execute(
            operation: "StopRecommender", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Stops a recommender that is ACTIVE. Stopping a recommender halts billing and automatic retraining for the recommender.
    ///
    /// Parameters:
    ///   - recommenderArn: The Amazon Resource Name (ARN) of the recommender to stop.
    ///   - logger: Logger use during operation
    @inlinable
    public func stopRecommender(
        recommenderArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StopRecommenderResponse {
        let input = StopRecommenderRequest(
            recommenderArn: recommenderArn
        )
        return try await self.stopRecommender(input, logger: logger)
    }

    /// Stops creating a solution version that is in a state of CREATE_PENDING or CREATE IN_PROGRESS.  Depending on the current state of the solution version, the solution version state changes as follows:   CREATE_PENDING > CREATE_STOPPED or   CREATE_IN_PROGRESS > CREATE_STOPPING > CREATE_STOPPED   You are billed for all of the training completed up until you stop the solution version creation. You cannot resume creating a solution version once it has been stopped.
    @Sendable
    @inlinable
    public func stopSolutionVersionCreation(_ input: StopSolutionVersionCreationRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "StopSolutionVersionCreation", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Stops creating a solution version that is in a state of CREATE_PENDING or CREATE IN_PROGRESS.  Depending on the current state of the solution version, the solution version state changes as follows:   CREATE_PENDING > CREATE_STOPPED or   CREATE_IN_PROGRESS > CREATE_STOPPING > CREATE_STOPPED   You are billed for all of the training completed up until you stop the solution version creation. You cannot resume creating a solution version once it has been stopped.
    ///
    /// Parameters:
    ///   - solutionVersionArn: The Amazon Resource Name (ARN) of the solution version you want to stop creating.
    ///   - logger: Logger use during operation
    @inlinable
    public func stopSolutionVersionCreation(
        solutionVersionArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = StopSolutionVersionCreationRequest(
            solutionVersionArn: solutionVersionArn
        )
        return try await self.stopSolutionVersionCreation(input, logger: logger)
    }

    /// Add a list of tags to a resource.
    @Sendable
    @inlinable
    public func tagResource(_ input: TagResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> TagResourceResponse {
        try await self.client.execute(
            operation: "TagResource", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Add a list of tags to a resource.
    ///
    /// Parameters:
    ///   - resourceArn: The resource's Amazon Resource Name (ARN).
    ///   - tags: Tags to apply to the resource. For more information see Tagging Amazon Personalize resources.
    ///   - logger: Logger use during operation
    @inlinable
    public func tagResource(
        resourceArn: String,
        tags: [Tag],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> TagResourceResponse {
        let input = TagResourceRequest(
            resourceArn: resourceArn, 
            tags: tags
        )
        return try await self.tagResource(input, logger: logger)
    }

    /// Removes the specified tags that are attached to a resource. For more information, see Removing tags from Amazon Personalize resources.
    @Sendable
    @inlinable
    public func untagResource(_ input: UntagResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UntagResourceResponse {
        try await self.client.execute(
            operation: "UntagResource", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Removes the specified tags that are attached to a resource. For more information, see Removing tags from Amazon Personalize resources.
    ///
    /// Parameters:
    ///   - resourceArn: The resource's Amazon Resource Name (ARN).
    ///   - tagKeys: The keys of the tags to be removed.
    ///   - logger: Logger use during operation
    @inlinable
    public func untagResource(
        resourceArn: String,
        tagKeys: [String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UntagResourceResponse {
        let input = UntagResourceRequest(
            resourceArn: resourceArn, 
            tagKeys: tagKeys
        )
        return try await self.untagResource(input, logger: logger)
    }

    ///  Updates a campaign to deploy a retrained solution version with an existing campaign, change your campaign's minProvisionedTPS, or modify your campaign's configuration. For example, you can set enableMetadataWithRecommendations to true for an existing campaign.  To update a campaign to start automatically using the latest solution version, specify the following:   For the SolutionVersionArn parameter, specify the Amazon Resource Name (ARN) of your solution in SolutionArn/$LATEST format.    In the campaignConfig, set syncWithLatestSolutionVersion to true.    To update a campaign, the campaign status must be ACTIVE or CREATE FAILED. Check the campaign status using the DescribeCampaign operation.  You can still get recommendations from a campaign while an update is in progress. The campaign will use the previous solution version and campaign configuration to generate recommendations until the latest campaign update status is Active.   For more information about updating a campaign, including code samples, see Updating a campaign. For more information about campaigns, see Creating a campaign.
    @Sendable
    @inlinable
    public func updateCampaign(_ input: UpdateCampaignRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateCampaignResponse {
        try await self.client.execute(
            operation: "UpdateCampaign", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Updates a campaign to deploy a retrained solution version with an existing campaign, change your campaign's minProvisionedTPS, or modify your campaign's configuration. For example, you can set enableMetadataWithRecommendations to true for an existing campaign.  To update a campaign to start automatically using the latest solution version, specify the following:   For the SolutionVersionArn parameter, specify the Amazon Resource Name (ARN) of your solution in SolutionArn/$LATEST format.    In the campaignConfig, set syncWithLatestSolutionVersion to true.    To update a campaign, the campaign status must be ACTIVE or CREATE FAILED. Check the campaign status using the DescribeCampaign operation.  You can still get recommendations from a campaign while an update is in progress. The campaign will use the previous solution version and campaign configuration to generate recommendations until the latest campaign update status is Active.   For more information about updating a campaign, including code samples, see Updating a campaign. For more information about campaigns, see Creating a campaign.
    ///
    /// Parameters:
    ///   - campaignArn: The Amazon Resource Name (ARN) of the campaign.
    ///   - campaignConfig: The configuration details of a campaign.
    ///   - minProvisionedTPS: Specifies the requested minimum provisioned transactions (recommendations) per second that Amazon Personalize will support. A high minProvisionedTPS will increase your bill. We recommend starting with 1 for minProvisionedTPS (the default). Track your usage using Amazon CloudWatch metrics, and increase the minProvisionedTPS as necessary.
    ///   - solutionVersionArn: The Amazon Resource Name (ARN) of a new model to deploy. To specify the latest solution version of your solution,  specify the ARN of your solution in SolutionArn/$LATEST format. You must use this format if you set syncWithLatestSolutionVersion to True in the  CampaignConfig.   To deploy a model that isn't the latest solution version of your solution, specify the ARN of the solution version.   For more information about automatic campaign updates, see  Enabling automatic campaign updates.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateCampaign(
        campaignArn: String,
        campaignConfig: CampaignConfig? = nil,
        minProvisionedTPS: Int? = nil,
        solutionVersionArn: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateCampaignResponse {
        let input = UpdateCampaignRequest(
            campaignArn: campaignArn, 
            campaignConfig: campaignConfig, 
            minProvisionedTPS: minProvisionedTPS, 
            solutionVersionArn: solutionVersionArn
        )
        return try await self.updateCampaign(input, logger: logger)
    }

    /// Update a dataset to replace its schema with a new or existing one. For more information, see Replacing a dataset's schema.
    @Sendable
    @inlinable
    public func updateDataset(_ input: UpdateDatasetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateDatasetResponse {
        try await self.client.execute(
            operation: "UpdateDataset", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Update a dataset to replace its schema with a new or existing one. For more information, see Replacing a dataset's schema.
    ///
    /// Parameters:
    ///   - datasetArn: The Amazon Resource Name (ARN) of the dataset that you want to update.
    ///   - schemaArn: The Amazon Resource Name (ARN) of the new schema you want use.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateDataset(
        datasetArn: String,
        schemaArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateDatasetResponse {
        let input = UpdateDatasetRequest(
            datasetArn: datasetArn, 
            schemaArn: schemaArn
        )
        return try await self.updateDataset(input, logger: logger)
    }

    /// Updates a metric attribution.
    @Sendable
    @inlinable
    public func updateMetricAttribution(_ input: UpdateMetricAttributionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateMetricAttributionResponse {
        try await self.client.execute(
            operation: "UpdateMetricAttribution", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates a metric attribution.
    ///
    /// Parameters:
    ///   - addMetrics: Add new metric attributes to the metric attribution.
    ///   - metricAttributionArn: The Amazon Resource Name (ARN) for the metric attribution to update.
    ///   - metricsOutputConfig: An output config for the metric attribution.
    ///   - removeMetrics: Remove metric attributes from the metric attribution.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateMetricAttribution(
        addMetrics: [MetricAttribute]? = nil,
        metricAttributionArn: String? = nil,
        metricsOutputConfig: MetricAttributionOutput? = nil,
        removeMetrics: [String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateMetricAttributionResponse {
        let input = UpdateMetricAttributionRequest(
            addMetrics: addMetrics, 
            metricAttributionArn: metricAttributionArn, 
            metricsOutputConfig: metricsOutputConfig, 
            removeMetrics: removeMetrics
        )
        return try await self.updateMetricAttribution(input, logger: logger)
    }

    /// Updates the recommender to modify the recommender configuration.  If you update the recommender to modify the columns used in training, Amazon Personalize automatically starts a full retraining of the models backing your recommender. While the update completes, you can still get recommendations from the recommender. The recommender uses the previous configuration until the update completes. To track the status of this update, use the latestRecommenderUpdate returned in the DescribeRecommender operation.
    @Sendable
    @inlinable
    public func updateRecommender(_ input: UpdateRecommenderRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateRecommenderResponse {
        try await self.client.execute(
            operation: "UpdateRecommender", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates the recommender to modify the recommender configuration.  If you update the recommender to modify the columns used in training, Amazon Personalize automatically starts a full retraining of the models backing your recommender. While the update completes, you can still get recommendations from the recommender. The recommender uses the previous configuration until the update completes. To track the status of this update, use the latestRecommenderUpdate returned in the DescribeRecommender operation.
    ///
    /// Parameters:
    ///   - recommenderArn: The Amazon Resource Name (ARN) of the recommender to modify.
    ///   - recommenderConfig: The configuration details of the recommender.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateRecommender(
        recommenderArn: String,
        recommenderConfig: RecommenderConfig,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateRecommenderResponse {
        let input = UpdateRecommenderRequest(
            recommenderArn: recommenderArn, 
            recommenderConfig: recommenderConfig
        )
        return try await self.updateRecommender(input, logger: logger)
    }

    /// Updates an Amazon Personalize solution to use a different automatic training configuration. When you update a solution,  you can change whether the solution uses automatic training, and you can change the training frequency. For more information about updating a solution, see  Updating a solution. A solution update can be in one of the following states: CREATE PENDING > CREATE IN_PROGRESS > ACTIVE -or- CREATE FAILED To get the status of a solution update, call the DescribeSolution API operation and find the status in the latestSolutionUpdate.
    @Sendable
    @inlinable
    public func updateSolution(_ input: UpdateSolutionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateSolutionResponse {
        try await self.client.execute(
            operation: "UpdateSolution", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates an Amazon Personalize solution to use a different automatic training configuration. When you update a solution,  you can change whether the solution uses automatic training, and you can change the training frequency. For more information about updating a solution, see  Updating a solution. A solution update can be in one of the following states: CREATE PENDING > CREATE IN_PROGRESS > ACTIVE -or- CREATE FAILED To get the status of a solution update, call the DescribeSolution API operation and find the status in the latestSolutionUpdate.
    ///
    /// Parameters:
    ///   - performAutoTraining: Whether the solution uses automatic training to create new solution versions (trained models). You can change the training frequency by specifying a schedulingExpression in the AutoTrainingConfig as part of solution configuration.   If you turn on automatic training, the first automatic training starts within one hour after the solution update completes. If you manually create a solution version within the hour, the solution skips the first automatic training.  For more information about automatic training, see Configuring automatic training.   After training starts, you can get the solution version's Amazon Resource Name (ARN) with the ListSolutionVersions API operation.  To get its status, use the DescribeSolutionVersion.
    ///   - solutionArn: The Amazon Resource Name (ARN) of the solution to update.
    ///   - solutionUpdateConfig: The new configuration details of the solution.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateSolution(
        performAutoTraining: Bool? = nil,
        solutionArn: String,
        solutionUpdateConfig: SolutionUpdateConfig? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateSolutionResponse {
        let input = UpdateSolutionRequest(
            performAutoTraining: performAutoTraining, 
            solutionArn: solutionArn, 
            solutionUpdateConfig: solutionUpdateConfig
        )
        return try await self.updateSolution(input, logger: logger)
    }
}

extension Personalize {
    /// Initializer required by `AWSService.with(middlewares:timeout:byteBufferAllocator:options)`. You are not able to use this initializer directly as there are not public
    /// initializers for `AWSServiceConfig.Patch`. Please use `AWSService.with(middlewares:timeout:byteBufferAllocator:options)` instead.
    public init(from: Personalize, patch: AWSServiceConfig.Patch) {
        self.client = from.client
        self.config = from.config.with(patch: patch)
    }
}

// MARK: Paginators

@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *)
extension Personalize {
    /// Return PaginatorSequence for operation ``listBatchInferenceJobs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listBatchInferenceJobsPaginator(
        _ input: ListBatchInferenceJobsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListBatchInferenceJobsRequest, ListBatchInferenceJobsResponse> {
        return .init(
            input: input,
            command: self.listBatchInferenceJobs,
            inputKey: \ListBatchInferenceJobsRequest.nextToken,
            outputKey: \ListBatchInferenceJobsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listBatchInferenceJobs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of batch inference job results to return in each page. The default value is 100.
    ///   - solutionVersionArn: The Amazon Resource Name (ARN) of the solution version from which the batch inference jobs were created.
    ///   - logger: Logger used for logging
    @inlinable
    public func listBatchInferenceJobsPaginator(
        maxResults: Int? = nil,
        solutionVersionArn: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListBatchInferenceJobsRequest, ListBatchInferenceJobsResponse> {
        let input = ListBatchInferenceJobsRequest(
            maxResults: maxResults, 
            solutionVersionArn: solutionVersionArn
        )
        return self.listBatchInferenceJobsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listBatchSegmentJobs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listBatchSegmentJobsPaginator(
        _ input: ListBatchSegmentJobsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListBatchSegmentJobsRequest, ListBatchSegmentJobsResponse> {
        return .init(
            input: input,
            command: self.listBatchSegmentJobs,
            inputKey: \ListBatchSegmentJobsRequest.nextToken,
            outputKey: \ListBatchSegmentJobsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listBatchSegmentJobs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of batch segment job results to return in each page. The default value is 100.
    ///   - solutionVersionArn: The Amazon Resource Name (ARN) of the solution version that the batch segment jobs used to generate batch segments.
    ///   - logger: Logger used for logging
    @inlinable
    public func listBatchSegmentJobsPaginator(
        maxResults: Int? = nil,
        solutionVersionArn: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListBatchSegmentJobsRequest, ListBatchSegmentJobsResponse> {
        let input = ListBatchSegmentJobsRequest(
            maxResults: maxResults, 
            solutionVersionArn: solutionVersionArn
        )
        return self.listBatchSegmentJobsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listCampaigns(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listCampaignsPaginator(
        _ input: ListCampaignsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListCampaignsRequest, ListCampaignsResponse> {
        return .init(
            input: input,
            command: self.listCampaigns,
            inputKey: \ListCampaignsRequest.nextToken,
            outputKey: \ListCampaignsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listCampaigns(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of campaigns to return.
    ///   - solutionArn: The Amazon Resource Name (ARN) of the solution to list the campaigns for. When a solution is not specified, all the campaigns associated with the account are listed.
    ///   - logger: Logger used for logging
    @inlinable
    public func listCampaignsPaginator(
        maxResults: Int? = nil,
        solutionArn: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListCampaignsRequest, ListCampaignsResponse> {
        let input = ListCampaignsRequest(
            maxResults: maxResults, 
            solutionArn: solutionArn
        )
        return self.listCampaignsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listDatasetExportJobs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listDatasetExportJobsPaginator(
        _ input: ListDatasetExportJobsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListDatasetExportJobsRequest, ListDatasetExportJobsResponse> {
        return .init(
            input: input,
            command: self.listDatasetExportJobs,
            inputKey: \ListDatasetExportJobsRequest.nextToken,
            outputKey: \ListDatasetExportJobsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listDatasetExportJobs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - datasetArn: The Amazon Resource Name (ARN) of the dataset to list the dataset export jobs for.
    ///   - maxResults: The maximum number of dataset export jobs to return.
    ///   - logger: Logger used for logging
    @inlinable
    public func listDatasetExportJobsPaginator(
        datasetArn: String? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListDatasetExportJobsRequest, ListDatasetExportJobsResponse> {
        let input = ListDatasetExportJobsRequest(
            datasetArn: datasetArn, 
            maxResults: maxResults
        )
        return self.listDatasetExportJobsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listDatasetGroups(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listDatasetGroupsPaginator(
        _ input: ListDatasetGroupsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListDatasetGroupsRequest, ListDatasetGroupsResponse> {
        return .init(
            input: input,
            command: self.listDatasetGroups,
            inputKey: \ListDatasetGroupsRequest.nextToken,
            outputKey: \ListDatasetGroupsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listDatasetGroups(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of dataset groups to return.
    ///   - logger: Logger used for logging
    @inlinable
    public func listDatasetGroupsPaginator(
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListDatasetGroupsRequest, ListDatasetGroupsResponse> {
        let input = ListDatasetGroupsRequest(
            maxResults: maxResults
        )
        return self.listDatasetGroupsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listDatasetImportJobs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listDatasetImportJobsPaginator(
        _ input: ListDatasetImportJobsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListDatasetImportJobsRequest, ListDatasetImportJobsResponse> {
        return .init(
            input: input,
            command: self.listDatasetImportJobs,
            inputKey: \ListDatasetImportJobsRequest.nextToken,
            outputKey: \ListDatasetImportJobsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listDatasetImportJobs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - datasetArn: The Amazon Resource Name (ARN) of the dataset to list the dataset import jobs for.
    ///   - maxResults: The maximum number of dataset import jobs to return.
    ///   - logger: Logger used for logging
    @inlinable
    public func listDatasetImportJobsPaginator(
        datasetArn: String? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListDatasetImportJobsRequest, ListDatasetImportJobsResponse> {
        let input = ListDatasetImportJobsRequest(
            datasetArn: datasetArn, 
            maxResults: maxResults
        )
        return self.listDatasetImportJobsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listDatasets(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listDatasetsPaginator(
        _ input: ListDatasetsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListDatasetsRequest, ListDatasetsResponse> {
        return .init(
            input: input,
            command: self.listDatasets,
            inputKey: \ListDatasetsRequest.nextToken,
            outputKey: \ListDatasetsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listDatasets(_:logger:)``.
    ///
    /// - Parameters:
    ///   - datasetGroupArn: The Amazon Resource Name (ARN) of the dataset group that contains the datasets to list.
    ///   - maxResults: The maximum number of datasets to return.
    ///   - logger: Logger used for logging
    @inlinable
    public func listDatasetsPaginator(
        datasetGroupArn: String? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListDatasetsRequest, ListDatasetsResponse> {
        let input = ListDatasetsRequest(
            datasetGroupArn: datasetGroupArn, 
            maxResults: maxResults
        )
        return self.listDatasetsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listEventTrackers(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listEventTrackersPaginator(
        _ input: ListEventTrackersRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListEventTrackersRequest, ListEventTrackersResponse> {
        return .init(
            input: input,
            command: self.listEventTrackers,
            inputKey: \ListEventTrackersRequest.nextToken,
            outputKey: \ListEventTrackersResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listEventTrackers(_:logger:)``.
    ///
    /// - Parameters:
    ///   - datasetGroupArn: The ARN of a dataset group used to filter the response.
    ///   - maxResults: The maximum number of event trackers to return.
    ///   - logger: Logger used for logging
    @inlinable
    public func listEventTrackersPaginator(
        datasetGroupArn: String? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListEventTrackersRequest, ListEventTrackersResponse> {
        let input = ListEventTrackersRequest(
            datasetGroupArn: datasetGroupArn, 
            maxResults: maxResults
        )
        return self.listEventTrackersPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listFilters(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listFiltersPaginator(
        _ input: ListFiltersRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListFiltersRequest, ListFiltersResponse> {
        return .init(
            input: input,
            command: self.listFilters,
            inputKey: \ListFiltersRequest.nextToken,
            outputKey: \ListFiltersResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listFilters(_:logger:)``.
    ///
    /// - Parameters:
    ///   - datasetGroupArn: The ARN of the dataset group that contains the filters.
    ///   - maxResults: The maximum number of filters to return.
    ///   - logger: Logger used for logging
    @inlinable
    public func listFiltersPaginator(
        datasetGroupArn: String? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListFiltersRequest, ListFiltersResponse> {
        let input = ListFiltersRequest(
            datasetGroupArn: datasetGroupArn, 
            maxResults: maxResults
        )
        return self.listFiltersPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listMetricAttributionMetrics(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listMetricAttributionMetricsPaginator(
        _ input: ListMetricAttributionMetricsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListMetricAttributionMetricsRequest, ListMetricAttributionMetricsResponse> {
        return .init(
            input: input,
            command: self.listMetricAttributionMetrics,
            inputKey: \ListMetricAttributionMetricsRequest.nextToken,
            outputKey: \ListMetricAttributionMetricsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listMetricAttributionMetrics(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of metrics to return in one page of results.
    ///   - metricAttributionArn: The Amazon Resource Name (ARN) of the metric attribution to retrieve attributes for.
    ///   - logger: Logger used for logging
    @inlinable
    public func listMetricAttributionMetricsPaginator(
        maxResults: Int? = nil,
        metricAttributionArn: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListMetricAttributionMetricsRequest, ListMetricAttributionMetricsResponse> {
        let input = ListMetricAttributionMetricsRequest(
            maxResults: maxResults, 
            metricAttributionArn: metricAttributionArn
        )
        return self.listMetricAttributionMetricsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listMetricAttributions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listMetricAttributionsPaginator(
        _ input: ListMetricAttributionsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListMetricAttributionsRequest, ListMetricAttributionsResponse> {
        return .init(
            input: input,
            command: self.listMetricAttributions,
            inputKey: \ListMetricAttributionsRequest.nextToken,
            outputKey: \ListMetricAttributionsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listMetricAttributions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - datasetGroupArn: The metric attributions' dataset group Amazon Resource Name (ARN).
    ///   - maxResults: The maximum number of metric attributions to return in one page of results.
    ///   - logger: Logger used for logging
    @inlinable
    public func listMetricAttributionsPaginator(
        datasetGroupArn: String? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListMetricAttributionsRequest, ListMetricAttributionsResponse> {
        let input = ListMetricAttributionsRequest(
            datasetGroupArn: datasetGroupArn, 
            maxResults: maxResults
        )
        return self.listMetricAttributionsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listRecipes(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listRecipesPaginator(
        _ input: ListRecipesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListRecipesRequest, ListRecipesResponse> {
        return .init(
            input: input,
            command: self.listRecipes,
            inputKey: \ListRecipesRequest.nextToken,
            outputKey: \ListRecipesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listRecipes(_:logger:)``.
    ///
    /// - Parameters:
    ///   - domain:  Filters returned recipes by domain for a Domain dataset group. Only recipes (Domain dataset group use cases) for this domain are included in the response. If you don't specify a domain, all recipes are returned.
    ///   - maxResults: The maximum number of recipes to return.
    ///   - recipeProvider: The default is SERVICE.
    ///   - logger: Logger used for logging
    @inlinable
    public func listRecipesPaginator(
        domain: Domain? = nil,
        maxResults: Int? = nil,
        recipeProvider: RecipeProvider? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListRecipesRequest, ListRecipesResponse> {
        let input = ListRecipesRequest(
            domain: domain, 
            maxResults: maxResults, 
            recipeProvider: recipeProvider
        )
        return self.listRecipesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listRecommenders(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listRecommendersPaginator(
        _ input: ListRecommendersRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListRecommendersRequest, ListRecommendersResponse> {
        return .init(
            input: input,
            command: self.listRecommenders,
            inputKey: \ListRecommendersRequest.nextToken,
            outputKey: \ListRecommendersResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listRecommenders(_:logger:)``.
    ///
    /// - Parameters:
    ///   - datasetGroupArn: The Amazon Resource Name (ARN) of the Domain dataset group to list the recommenders for. When a Domain dataset group is not specified, all the recommenders associated with the account are listed.
    ///   - maxResults: The maximum number of recommenders to return.
    ///   - logger: Logger used for logging
    @inlinable
    public func listRecommendersPaginator(
        datasetGroupArn: String? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListRecommendersRequest, ListRecommendersResponse> {
        let input = ListRecommendersRequest(
            datasetGroupArn: datasetGroupArn, 
            maxResults: maxResults
        )
        return self.listRecommendersPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listSchemas(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listSchemasPaginator(
        _ input: ListSchemasRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListSchemasRequest, ListSchemasResponse> {
        return .init(
            input: input,
            command: self.listSchemas,
            inputKey: \ListSchemasRequest.nextToken,
            outputKey: \ListSchemasResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listSchemas(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of schemas to return.
    ///   - logger: Logger used for logging
    @inlinable
    public func listSchemasPaginator(
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListSchemasRequest, ListSchemasResponse> {
        let input = ListSchemasRequest(
            maxResults: maxResults
        )
        return self.listSchemasPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listSolutionVersions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listSolutionVersionsPaginator(
        _ input: ListSolutionVersionsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListSolutionVersionsRequest, ListSolutionVersionsResponse> {
        return .init(
            input: input,
            command: self.listSolutionVersions,
            inputKey: \ListSolutionVersionsRequest.nextToken,
            outputKey: \ListSolutionVersionsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listSolutionVersions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of solution versions to return.
    ///   - solutionArn: The Amazon Resource Name (ARN) of the solution.
    ///   - logger: Logger used for logging
    @inlinable
    public func listSolutionVersionsPaginator(
        maxResults: Int? = nil,
        solutionArn: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListSolutionVersionsRequest, ListSolutionVersionsResponse> {
        let input = ListSolutionVersionsRequest(
            maxResults: maxResults, 
            solutionArn: solutionArn
        )
        return self.listSolutionVersionsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listSolutions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listSolutionsPaginator(
        _ input: ListSolutionsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListSolutionsRequest, ListSolutionsResponse> {
        return .init(
            input: input,
            command: self.listSolutions,
            inputKey: \ListSolutionsRequest.nextToken,
            outputKey: \ListSolutionsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listSolutions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - datasetGroupArn: The Amazon Resource Name (ARN) of the dataset group.
    ///   - maxResults: The maximum number of solutions to return.
    ///   - logger: Logger used for logging
    @inlinable
    public func listSolutionsPaginator(
        datasetGroupArn: String? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListSolutionsRequest, ListSolutionsResponse> {
        let input = ListSolutionsRequest(
            datasetGroupArn: datasetGroupArn, 
            maxResults: maxResults
        )
        return self.listSolutionsPaginator(input, logger: logger)
    }
}

extension Personalize.ListBatchInferenceJobsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Personalize.ListBatchInferenceJobsRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            solutionVersionArn: self.solutionVersionArn
        )
    }
}

extension Personalize.ListBatchSegmentJobsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Personalize.ListBatchSegmentJobsRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            solutionVersionArn: self.solutionVersionArn
        )
    }
}

extension Personalize.ListCampaignsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Personalize.ListCampaignsRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            solutionArn: self.solutionArn
        )
    }
}

extension Personalize.ListDatasetExportJobsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Personalize.ListDatasetExportJobsRequest {
        return .init(
            datasetArn: self.datasetArn,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Personalize.ListDatasetGroupsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Personalize.ListDatasetGroupsRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Personalize.ListDatasetImportJobsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Personalize.ListDatasetImportJobsRequest {
        return .init(
            datasetArn: self.datasetArn,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Personalize.ListDatasetsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Personalize.ListDatasetsRequest {
        return .init(
            datasetGroupArn: self.datasetGroupArn,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Personalize.ListEventTrackersRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Personalize.ListEventTrackersRequest {
        return .init(
            datasetGroupArn: self.datasetGroupArn,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Personalize.ListFiltersRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Personalize.ListFiltersRequest {
        return .init(
            datasetGroupArn: self.datasetGroupArn,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Personalize.ListMetricAttributionMetricsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Personalize.ListMetricAttributionMetricsRequest {
        return .init(
            maxResults: self.maxResults,
            metricAttributionArn: self.metricAttributionArn,
            nextToken: token
        )
    }
}

extension Personalize.ListMetricAttributionsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Personalize.ListMetricAttributionsRequest {
        return .init(
            datasetGroupArn: self.datasetGroupArn,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Personalize.ListRecipesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Personalize.ListRecipesRequest {
        return .init(
            domain: self.domain,
            maxResults: self.maxResults,
            nextToken: token,
            recipeProvider: self.recipeProvider
        )
    }
}

extension Personalize.ListRecommendersRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Personalize.ListRecommendersRequest {
        return .init(
            datasetGroupArn: self.datasetGroupArn,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Personalize.ListSchemasRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Personalize.ListSchemasRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Personalize.ListSolutionVersionsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Personalize.ListSolutionVersionsRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            solutionArn: self.solutionArn
        )
    }
}

extension Personalize.ListSolutionsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Personalize.ListSolutionsRequest {
        return .init(
            datasetGroupArn: self.datasetGroupArn,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}
